初学java,编写一个客户端与服务器端互相通话的小程序,却无法正常运行,求大神帮忙看看怎么回事儿
这是服务器端代码:
import java.io.*;
import java.net.*;
import java.awt.event.*;
import javax.swing.*;
public class ServerSocketFrame extends JFrame {
private PrintWriter writer;
private BufferedReader reader;
private ServerSocket server;
private Socket socket;
private JPanel jp = new JPanel();
private JTextArea jt = new JTextArea();
private JScrollPane js = new JScrollPane(jt);
private JTextField jName = new JTextField();
JLabel jl = new JLabel();
public ServerSocketFrame() {
jp.setLayout(null);
jName.setBounds(130, 15, 100, 20);
jp.add(jName);
js.setBounds(360, 80, 300, 300);
jp.add(js);
this.add(jp);
this.setTitle("chat sever");
this.setBounds(200, 200, 1000, 800);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getServer();
}
public void getServer() {
try {
jName.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
writer.print(jName.getText());
jt.append("服务器端发消息:"+jName.getText()+"\n");
jName.setText("");
}
});
server = new ServerSocket(8888);
jt.append("服务器套接字创建成功" + "\n");
jt.append("等待客户端连接" + "\n");
while(true){
socket = server.accept();
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
// Thread.sleep(10000);
//writer.print("nihao");
//writer.print("wojiaolizeyu");
String line = reader.readLine();
jt.append("接受客户端发来的信息" + line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
reader.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new ServerSocketFrame();
}
/*public void actionPerformed(ActionEvent e) {
writer.print(jName.getText());
jt.append("服务器发送的信息:" + jName.getText() + "\n");
jName.setText("");
writer.flush();
}
*/
}
这是客户端代码:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ClientSocketFrame extends JFrame {
JPanel jp = new JPanel();
private JTextArea jt = new JTextArea();
private JScrollPane js = new JScrollPane(jt);
private JTextField jName = new JTextField();
JLabel jl = new JLabel();
PrintWriter writer;
BufferedReader reader;
Socket socket;
public ClientSocketFrame() {
jp.setLayout(null);
jName.setBounds(130, 15, 100, 20);
jp.add(jName);
js.setBounds(360, 80, 300, 300);
jp.add(js);
this.add(jp);
this.setTitle("chat sever");
this.setBounds(200, 200, 1000, 800);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getClient();
}
public void getClient() {
try {
jName.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
writer.print(jName.getText());
jt.append("客户发消息:"+jName.getText()+"\n");
jName.setText("");
}
});
socket = new Socket("127.0.0.1", 8888);
System.out.println(socket);
jt.append("尝试连接..." + "\n");
while (true) {
writer = new PrintWriter(socket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
jt.append("完成连接"+"\n");
System.out.println("dsf");
String line=reader.readLine();
System.out.println("eff");
System.out.println(line);
jt.append("接收服务器发来的信息" + line + "\n");
System.out.println("haha");
}
}
catch(Exception e){
e.printStackTrace();
}
finally {
try {
reader.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new ClientSocketFrame();
}
/* public void actionPerformed(ActionEvent e) {
writer.print(jName.getText());
jt.append("客户端发送消息"+jName.getText() + "\n");
jName.setText("");
}*/
}
求各路大神帮忙看看这个小程序哪里出问题了,多谢大家了!
调试,先检查是数据发送的问题还是接收的问题
检查网络设置
既然你有
catch (Exception e) {
e.printStackTrace();
}
看看有没有错误,贴出来
这应该是不对的,每次循环后,就连接就直接close掉了。
finally {
try {
reader.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
可以看一下例子
http://blog.csdn.net/gxy3509394/article/details/7899923
先运行服务端,然后运行客户端,接下来看客户端是否连接上服务端,服务端是否收到客户端请求
跟我的一样,我也刚学,后来我试了下,好像只要客户端中事务监听器不和socket的创建不都在构造函数里就可以了,但具体为什么我也不清楚,求大神指教!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Client extends JFrame{
Socket socket = null;
PrintWriter pw=null ;
JTextField tf = new JTextField();
JTextArea ta = new JTextArea();
public Client() {
tf.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
String str = tf.getText();
ta.append("客户端说:" + str + "\n");
tf.setText("");
System.out.println(str);
pw.println(str);
}
});
JLabel label = new JLabel("请输入聊天内容:");
this.setLayout(null);
label.setBounds(10, 10, 100, 50);
tf.setBounds(120, 25, 200, 20);
ta.setBounds(0, 50, 400, 300);
add(label);
add(tf);
add(ta);
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void start()
{
try {
socket = new Socket("localhost", 8088);
pw = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()),true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client();
client.start();
}
}