当前位置:编程学习 > JAVA >>

~~~聊天小项目 求解

新手起步求大神解释

聊天项目:chat客户端,server 服务端
程序目的:把客户端发送的消息传到服务器端
现在出现的问题是在server中出现java.net.SocketException: Connection reset 这个问题

出现问题处有标记

当我把异常处理结果(打印异常) 注(//)掉就会编译正常,不注(//)时就会出现异常

为什么会出现这个问题

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

public class chat extends Frame{

DataOutputStream dos = null;
Socket s ;
TextField tfText = new TextField();
TextArea taText = new TextArea();

public static void main (String [] args){

new chat().launchFrame();
}

public void launchFrame(){
setBounds(400,150,500,450);
add(tfText,BorderLayout.SOUTH);
add(taText,BorderLayout.CENTER);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
try{
s.close();
}catch (IOException e1){
e1.printStackTrace();
}
}
});
tfText.addActionListener(new TFListener());
setVisible(true);
connect();
}

public void connect(){
try{
s = new Socket("127.0.0.1",8888);
dos = new DataOutputStream(s.getOutputStream());
}catch (UnknownHostException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
}

class TFListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String str = tfText.getText();
taText.setText(str);
tfText.setText("");
try{
dos.writeUTF(str);
dos.flush();
//dos.close();
}catch (IOException e1){
e1.printStackTrace();
}


}
}
}


服务器端


import java.io.*;
import java.net.*;

public class server{

Socket s =null;
ServerSocket ss = null;
boolean start = false;
DataInputStream dis = null;

public static void main(String [] args){
new server().start();
}

public void start(){
try{
ss = new ServerSocket(8888);
}catch(BindException e){
System.out.println("端口已被使用");
System.out.println("请关闭后。重新运行");
System.exit(0);
}catch(IOException e){
e.printStackTrace();
}
try{
start = true;
while(start){
boolean bConnect = false;
s = ss.accept();
bConnect = true;
//System.out.println("s connected ");
dis = new DataInputStream(s.getInputStream());
while(bConnect){
String str = dis.readUTF();
System.out.println(str);
}
//dis.close();
}
}catch(EOFException e){
System.out.println("chat close");
}catch(IOException e){
//e.printStackTrace(); //出现问题的地方,这句注掉就可以编译成功
}finally{
try{
if(dis!=null)dis.close();
if(s!=null)s.close();
}catch (IOException e){
e.printStackTrace();
}

}
}
}
~~~聊天小项目  求解 --------------------编程问答-------------------- soket编程案例可以到google搜一下,有很多资源。 --------------------编程问答-------------------- socket写错了,sorry! --------------------编程问答-------------------- 我目测这个没问题啊
System.out.println("chat close");
你发个编译不通过的图看下,或者鼠标放上去,什么错误? --------------------编程问答-------------------- java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
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 server.start(server.java:34)
at server.main(server.java:12)


这是将42行注释 操作符去掉后出现的错误、 --------------------编程问答-------------------- 这个报错是 关闭窗口的时候出现的错误 --------------------编程问答-------------------- 可能Socket ss没有关闭导致的,该关的就要关掉,虽然正常运行没什么问题。
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,