Connection reset

景天晓志 2012-09-17 06:05:03
ChatServer.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ChatServer {
/**
* @param args
*/
public static ServerSocket serverSocket = null;
public static boolean b = false;
List<Client> clients=new ArrayList<ChatServer.Client>();

public static void main(String[] args) {

new ChatServer().start();
}

public void start()
{
try {
serverSocket = new ServerSocket(8888);// 创建绑定到特定端口的服务器套接字。
b = true;
} catch (BindException e) {
System.out.println("端口使用中");
System.exit(0);// ////开两个服务器就关掉
} catch (IOException e) {
e.printStackTrace();
}
try {
while (b) {
Socket socket = serverSocket.accept();// 侦听并接受到此套接字的连接。//堵塞//监听在8888端口
Client c=new Client(socket);
clients.add(c);
new Thread(c).start();
System.out.println("a Client connect");
}
} catch (IOException e) {
e.printStackTrace();
}
finally
{
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


class Client implements Runnable {
private Socket socket = null;
private DataInputStream dataInputStream = null;
private DataOutputStream dataOutputStream = null;
String str=null;
public Client(Socket socket) {
super();
this.socket = socket;
try {
dataOutputStream=new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}

private void send() {
try {
dataOutputStream.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}

public void run() {
try {
while (true) {
str = dataInputStream.readUTF();// 从包含的输入流中读取此操作需要的字节。
System.out.println(str);
for(Client client:clients)
{
client.send();
}
}
} catch (EOFException e) {
System.out.println("Client Closed");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (dataInputStream != null)
dataInputStream.close();
if (dataOutputStream != null)
dataOutputStream.close();
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}

}

}

}

}



ChatClient.java

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;


public class ChatClient extends Frame {
private TextArea area=new TextArea();
private TextField field=new TextField();
Socket socket=null;
private boolean b=false;
DataOutputStream dataOutputStream=null;
DataInputStream dataInputStream=null;
Thread t=new Thread(new ReceThread());

public ChatClient() {
this.setBounds(100, 100, 300, 300);
this.setVisible(true);
this .add(field,BorderLayout.SOUTH);
this.add(area,BorderLayout.NORTH);
field.addActionListener(new ActionMonitor());
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
disConnect();
System.exit(0);
}
});
connect();
t.start();
}
public void connect()
{
try {
socket=new Socket("127.0.0.1",8888);// 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
b=true;
dataOutputStream=new DataOutputStream(socket.getOutputStream());///也可以BufferedOutputStream///返回此套接字的输出流。
dataInputStream=new DataInputStream(socket.getInputStream());
System.out.println("connect()");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void disConnect ()
{
try {
socket.close();
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatClient();

}

class ActionMonitor implements ActionListener
{
public void actionPerformed(ActionEvent e) {
String s=field.getText().trim();
area.setText(s);
field.setText("");

try {
dataOutputStream.writeUTF(s);// 以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
dataOutputStream.flush();

} catch (IOException e1) {
e1.printStackTrace();
}
}

}


class ReceThread implements Runnable
{
public void run() {
try {
while(b)
{
String str=dataInputStream.readUTF();
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}

}
}



为什么编译的时候会出错
connect()
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:320)
at java.io.DataInputStream.readUTF(DataInputStream.java:572)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at ChatClient$ReceThread.run(ChatClient.java:95)
at java.lang.Thread.run(Thread.java:619)

...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LogicTeamLeader 2012-09-17
  • 打赏
  • 举报
回复
连接被重置,用其他的数据库工具连接你的数据库试试看?
江湖啊江湖 2012-09-17
  • 打赏
  • 举报
回复
8888端口没问题?
nmyangym 2012-09-17
  • 打赏
  • 举报
回复
编译正常啊! 运行也行,要是CharServer关闭的话,客户端报上述异常属正常.

62,615

社区成员

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

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