老是解决不了 跪求帮忙!
代码如下
服务器:
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("");
}
}
}
代码如下
服务器:
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("");
}
}
}
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();
问题在这句:
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();
}
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("");
}
}
}