import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class MygobangServer extends JFrame implements ActionListener
{
private JPanel mainPanel=new JPanel();
private Container Pane;
private JButton startButton=new JButton("Server Started");
private JButton stopButton=new JButton("Stop Server");
private BufferedReader readName;
public MygobangServer()
{
Pane=getContentPane();
Pane.add(mainPanel);
mainPanel.setLayout(new GridLayout(1,2));
mainPanel.add(startButton);
mainPanel.add(stopButton);
stopButton.addActionListener(this);
this.setSize(250,80);
this.setLocation(10,650);
this.setVisible(true);
try
{
ServerSocket server=new ServerSocket(8888,50);
while(true)//等待连接
{
System.out.println("Writing to connected...");
Socket connection=server.accept();
new changeMessage(connection);//开一个线程
System.out.println("One user Login...");
}
}
catch(IOException e)
{
System.out.println("New ServerSocket"+e);
}
}
private class changeMessage extends Thread
{
private String MyName;
private Socket connection;
private ObjectInputStream input;
private ObjectOutputStream output;
private ChangeMessage tempMessage;
public changeMessage(Socket con)
{
this.connection=con;
try
{
input=new ObjectInputStream(connection.getInputStream());
output=new ObjectOutputStream(connection.getOutputStream());
}
catch(Exception eee)
{
System.out.println("New Stream"+eee);
eee.printStackTrace();
}
this.start();
}
public void run()
{
try
{
while(true)
{
try
{
this.sleep(100);
}
catch(Exception ee)
{
System.out.println("Sleep Thread"+ee);
}
try
{
tempMessage=(ChangeMessage)input.readObject();
System.out.println(tempMessage.getChatMessage());
if(tempMessage.getFlay()==1)
{
MyName=tempMessage.getFromName();
}
else
{
output.writeObject(tempMessage);
System.out.println(tempMessage.getChatMessage()+"AccpetMessage");
}
}
catch(Exception eeee)
{
System.out.println("ReadOBject"+eeee);
input.close();
return;
}
}
}
catch(IOException e)
{
System.out.println("Input Data"+e);
}
}
}
}客户端写出数据时是没有问题的!
我现在怀疑流的问题但还是找不出来!
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class MygobangServer extends JFrame implements ActionListener
{
private JPanel mainPanel=new JPanel();
private Container Pane;
private JButton startButton=new JButton("Server Started");
private JButton stopButton=new JButton("Stop Server");
private BufferedReader readName;
public MygobangServer()
{
Pane=getContentPane();
Pane.add(mainPanel);
mainPanel.setLayout(new GridLayout(1,2));
mainPanel.add(startButton);
mainPanel.add(stopButton);
stopButton.addActionListener(this);
this.setSize(250,80);
this.setLocation(10,650);
this.setVisible(true);
try
{
ServerSocket server=new ServerSocket(8888,50);
while(true)//等待连接
{
System.out.println("Writing to connected...");
Socket connection=server.accept();
new changeMessage(connection);//开一个线程
System.out.println("One user Login...");
}
}
catch(IOException e)
{
System.out.println("New ServerSocket"+e);
}
}
private class changeMessage extends Thread
{
private String MyName;
private Socket connection;
private ObjectInputStream input;
private ObjectOutputStream output;
private ChangeMessage tempMessage;
public changeMessage(Socket con)
{
this.connection=con;
try
{
input=new ObjectInputStream(connection.getInputStream());
output=new ObjectOutputStream(connection.getOutputStream());
}
catch(Exception eee)
{
System.out.println("New Stream"+eee);
eee.printStackTrace();
}
this.start();
}
public void run()
{
try
{
while(true)
{
try
{
this.sleep(100);
}
catch(Exception ee)
{
System.out.println("Sleep Thread"+ee);
}
try
{
tempMessage=(ChangeMessage)input.readObject();
System.out.println(tempMessage.getChatMessage());
if(tempMessage.getFlay()==1)
{
MyName=tempMessage.getFromName();
}
else
{
output.writeObject(tempMessage);
System.out.println(tempMessage.getChatMessage()+"AccpetMessage");
}
}
catch(Exception eeee)
{
System.out.println("ReadOBject"+eeee);
input.close();
return;
}
}
}
catch(IOException e)
{
System.out.println("Input Data"+e);
}
}
}
}客户端写出数据时是没有问题的!
我现在怀疑流的问题但还是找不出来!
1.System.out.println(tempMessage.getChatMessage())
从这里传递的String必须是static
2.在服务器的输出流中,每次接受到了客户端的消息后要记得out.flush().清除缓冲区的字符串.readerbuffer和writebuffer.
你的程序有点乱,而且不全,所以只能提点建议,希望对你有用.我以前也遇到过类似的问题.