客户端和服务端问题

Acllies 2009-11-23 06:17:09
服务器端代码:
import java.io.*;
import java.net.*;

public class ChatServer {

public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(7777);
while(true) {
Socket s = ss.accept();
System.out.println("a client connected!");
DataInputStream dis = new DataInputStream(s.getInputStream());
//String s1 = "";
//while( (s1 = dis.readLine())!= null)
//{
// System.out.println(s1);
//}
String str = dis.readUTF();
System.out.println(str);
dis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

}

客户端代码:
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;

public class ChatClient extends Frame {

TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Socket s = null;

public static void main(String[] args) {
new ChatClient().launchFrame();
}

public void launchFrame() {
this.setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();
}

private void connect() {
try {
Socket s = new Socket("127.0.0.1",7777);
System.out.println("connected!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private class TFListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
String str = tfTxt.getText().trim();
//String s2 = taContent.getText();
taContent.setText(str);
tfTxt.setText("");
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(str);
dos.flush();
dos.close();
} catch (IOException e1) {
e1.printStackTrace();
}

}

}

}

运行客户端的时候,一往TextField里面输入数据发送的时候就出现了如下错误:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at ChatServer.main(ChatServer.java:18)
请问是什么原因呢?该如何去修改呢?
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acllies 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiang5495 的回复:]
你这程序实一一会话没问题啊,
要实现多个会话,加上多线程就可以了,
你的程序我运行了,没有提示你上述的问题啊!
[/Quote]
我已经知道错在哪了,已经定义了成员变量Socket,在Socket s = new Socket("127.0.0.1")中就不该在重新定义个Socket局部变量了,出现了空指针异常错误。
bawgiitx 2009-11-23
  • 打赏
  • 举报
回复
ChatServer


import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ChatServer {

public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(7777);
while (true) {
Socket s = ss.accept();
System.out.println("a new client connected!");
final DataInputStream dis = new DataInputStream(s.getInputStream());
new Thread(new Runnable() {//多线程,支持多个客户端
public void run() {
String s1 = "";
try {
while ((s1 = dis.readUTF()) != null) {
System.out.println(s1);
////
////
}
} catch (IOException ex) {
Logger.getLogger(ChatServer.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("断开连接");
}
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}



ChatClient


import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;

public class ChatClient extends Frame {

TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Socket s = null;

public static void main(String[] args) {
new ChatClient().launchFrame();
}

public void launchFrame() {
this.setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {
try {
if(s!=null)
s.close();
} catch (IOException ex) {
}
System.exit(0);
}
});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();
}

private void connect() {
try {
/*Socket 这里的问题*/ s = new Socket("127.0.0.1", 7777);
System.out.println("connected!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private class TFListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
String str = tfTxt.getText().trim();
//String s2 = taContent.getText();
taContent.setText(str);
tfTxt.setText("");
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(str);
dos.flush();
//dos.close();//////////////////////
} catch (IOException e1) {
e1.printStackTrace();
}

}
}
}
jiang5495 2009-11-23
  • 打赏
  • 举报
回复
你这程序实一一会话没问题啊,
要实现多个会话,加上多线程就可以了,
你的程序我运行了,没有提示你上述的问题啊!

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧