java.net.SocketException: Connection reset 分高,在线等!!!!

luiganqian 2010-06-20 04:49:47
老是解决不了 跪求帮忙!
代码如下
服务器:
package Server;

import java.io.*;
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.net.*;
public class MyServer extends JFrame implements ActionListener {

public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer ms=new MyServer();
}
JPanel jp=null;
JTextArea jta;
JTextField jt=null;
JScrollPane jsp=null;
JButton jb=null;
PrintWriter pw=null;

public MyServer()
{
jp=new JPanel();
jt=new JTextField(15);
jb=new JButton("发送");
jb.addActionListener(this);
jta=new JTextArea();
jsp=new JScrollPane(jta);

jp.add(jt);
jp.add(jb);

this.add(jsp,"Center");
this.add(jp,"South");
this.setSize(300,200);
this.setTitle("服务器");
this.setVisible(true);

try {
ServerSocket ss=new ServerSocket(8888);
//System.out.println("这是服务器 端口是9988。。。。。");
Socket s=ss.accept();

InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
pw=new PrintWriter(s.getOutputStream(),true);
// s.close();
while(true)
{
String info=br.readLine();
jta.append("客户端对你说: "+info+"\r\n");

}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
String info=jt.getText();
jta.append("你对客户端说: "+info + "\r\n");
pw.print(info);
jt.setText("");
}

}


}

---------------------------------------------------------------------------------------------------------------
客户端
package Client;

import java.io.*;
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.net.*;
public class MyClient extends JFrame implements ActionListener{

public static void main(String[] args) {
// TODO Auto-generated method stub
MyClient ms=new MyClient();
}
JPanel jp=null;
JTextArea jta;
JTextField jt=null;
JScrollPane jsp=null;
JButton jb=null;
PrintWriter pw;
public MyClient()
{
jp=new JPanel();
jt=new JTextField(15);
jb=new JButton("发送");
jb.addActionListener(this);
jta=new JTextArea();
jsp=new JScrollPane(jta);

jp.add(jt);
jp.add(jb);

this.add(jsp,"Center");
this.add(jp,"South");
this.setSize(300,200);
this.setTitle("客户端");
this.setVisible(true);

try {
Socket s=new Socket("127.0.0.1",8888);
InputStreamReader isr2=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr2);
pw=new PrintWriter(s.getOutputStream(),true);
//s.close();
while(true)
{
String info=br.readLine();
jta.setText("服务器对你说: "+info+"\r\n");
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
String info=jt.getText();
jta.append("你对服务器说: "+info+"\r\n");
pw.print(info);
jt.setText("");
}

}

}
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Apeipo 2010-06-20
  • 打赏
  • 举报
回复
恩,搞定了 - -,顺便帮你解决了不能接收的问题。

package Client;

import java.io.*;
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.net.*;
import java.util.Scanner;
public class MyClient extends JFrame implements ActionListener{

public static void main(String[] args) {
// TODO Auto-generated method stub
MyClient ms=new MyClient();
}
JPanel jp=null;
JTextArea jta;
JTextField jt=null;
JScrollPane jsp=null;
JButton jb=null;
PrintWriter pw;
public MyClient()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
jp=new JPanel();
jt=new JTextField(15);
jb=new JButton("发送");
jb.addActionListener(this);
jta=new JTextArea();
jsp=new JScrollPane(jta);

jp.add(jt);
jp.add(jb);

this.add(jsp,"Center");
this.add(jp,"South");
this.setSize(300,200);
this.setTitle("客户端");
this.setVisible(true);

try {
Socket s=new Socket("127.0.0.1",8888);
InputStreamReader isr2=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr2);
pw=new PrintWriter(s.getOutputStream(),true);
//s.close();
// while(!s.isClosed())
// {
// String info=br.readLine();
// jta.setText("服务器对你说: "+info+"\r\n");
// }

////////////////////////////////////////////////////////////////////////////////
//这里要判断客户端是不是关了
Scanner in = new Scanner(isr2);
while(!s.isClosed() && in.hasNextLine())
{
String info=in.nextLine();
jta.setText("服务器对你说: "+info+"\r\n");
}
/////////////////////////////////////////////////////////////////////////

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
String info=jt.getText();
jta.append("你对服务器说: "+info+"\r\n");
///////////////////////////////////////////////////////////////
//这里必须用println!!!,否则接收方无法判断接受到一行
pw.println(info);
/////////////////////////////////////////////////////////////
jt.setText("");
}

}

}




package Server;

import java.io.*;
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.net.*;
import java.util.Scanner;
public class MyServer extends JFrame implements ActionListener {

public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer ms=new MyServer();
}
JPanel jp=null;
JTextArea jta;
JTextField jt=null;
JScrollPane jsp=null;
JButton jb=null;
PrintWriter pw=null;

public MyServer()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
jp=new JPanel();
jt=new JTextField(15);
jb=new JButton("发送");
jb.addActionListener(this);
jta=new JTextArea();
jsp=new JScrollPane(jta);

jp.add(jt);
jp.add(jb);

this.add(jsp,"Center");
this.add(jp,"South");
this.setSize(300,200);
this.setTitle("服务器");
this.setVisible(true);

try {
ServerSocket ss=new ServerSocket(8888);
//System.out.println("这是服务器 端口是9988。。。。。");
Socket s=ss.accept();

InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
pw=new PrintWriter(s.getOutputStream(),true);
// s.close();
// while(!s.isClosed())
// {
// String info=br.readLine();
// jta.append("客户端对你说: "+info+"\r\n");
// }
///////////////////////////////////////////////////////////////////////////////////
Scanner in = new Scanner(isr);
while(!s.isClosed() && in.hasNextLine())
{
String info=in.nextLine();
jta.setText("客户端对你说: "+info+"\r\n");
}
///////////////////////////////////////////////////////////////////////////////////
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
String info=jt.getText();
jta.append("你对客户端说: "+info + "\r\n");
/////////////////////////////////////////////////////////////
pw.println(info);
///////////////////////////////////////////////////////////////
jt.setText("");
}

}


}



Apeipo 2010-06-20
  • 打赏
  • 举报
回复
恩 ,首先帮你解决connection的问题
问题在这句:
String info=br.readLine();
服务端在这句等待输入,可是关闭客户端是,就抛出了connection reset;

//服务端的代码我改了,你自己对比下,客户端对应着也要改
try {
Socket s=new Socket("127.0.0.1",8888);
InputStreamReader isr2=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr2);
pw=new PrintWriter(s.getOutputStream(),true);
//s.close();
// while(!s.isClosed())
// {
// String info=br.readLine();
// jta.setText("服务器对你说: "+info+"\r\n");
// }
///////////////////
Scanner in = new Scanner(isr);
while(in.hasNextLine())
{
String info=br.readLine();
jta.setText("服务器对你说: "+info+"\r\n");
}
///////////////////

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

zhanlang9075 2010-06-20
  • 打赏
  • 举报
回复
Sorry,I Don't Know, 但愿后面的同志能帮LZ解决这个问题。
Apeipo 2010-06-20
  • 打赏
  • 举报
回复
Connection reset? 端口被占用了

试试改一下端口.
  • 打赏
  • 举报
回复
服务器端,和客户端有两段代码:
 while(true)
{
String info=br.readLine();
jta.append("客户端对你说: "+info+"\r\n");

}


while(true)
{
String info=br.readLine();
jta.setText("服务器对你说: "+info+"\r\n");
}


我觉得怪怪的,你是要让两边都能进行交流吗?
那么你应该把try里的语句都包含在while字句里,比如server端应该是:
try {
while(true)
{
ServerSocket ss=new ServerSocket(8888);
//System.out.println("这是服务器 端口是9988。。。。。");
Socket s=ss.accept();

InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
pw=new PrintWriter(s.getOutputStream(),true);
// s.close();

String info=br.readLine();
jta.append("客户端对你说: "+info+"\r\n");

}

} catch (IOException e) {


--
并且你要注意流的刷新
pw.flush();

以及io流等的关闭
pw.close();
br.close();
s.close();
hjjk123 2010-06-20
  • 打赏
  • 举报
回复
帮顶吧..........
haikuotian184 2010-06-20
  • 打赏
  • 举报
回复
狂晕啊啊啊啊啊啊啊啊啊啊啊

62,615

社区成员

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

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