//Server.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;public class Server implements Runnable
{
ServerSocket serverSocket;
Socket fromClient;
Socket toClient[] = new Socket[4];
Thread serverThread;
DataOutputStream streamToClient;
DataInputStream streamFromClient;
String msg = ""; int i, j; public Server()
{
try {
serverSocket = new ServerSocket(5555);
serverThread = new Thread(this);
serverThread.start();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("服务器已启动");
} @Override
public void run()
{
// TODO Auto-generated method stub
while (true)
{
try
{
fromClient = serverSocket.accept();
streamToClient = new DataOutputStream(fromClient
.getOutputStream());
streamFromClient = new DataInputStream(fromClient
.getInputStream());
msg = streamFromClient.readUTF();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if ( msg.equals("send") )
{ try
{
streamToClient = new DataOutputStream(fromClient
.getOutputStream());
streamToClient.writeUTF("send");
streamToClient.writeUTF("XX说hello");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
if ( msg.equals("login") )
{
try
{
streamToClient = new DataOutputStream(fromClient
.getOutputStream());
streamToClient.writeUTF("login");
streamToClient.writeUTF("XX连接"); }
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} } public static void main(String agrs[])
{
new Server();
}}
//Client.javaimport java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;public class Client extends JFrame implements ActionListener, Runnable
{ DataInputStream streamFromServer;
DataOutputStream streamToServer;
Socket toServer;
JTextArea txtMessages;
JButton connectBtn, send;
JPanel panel;
JScrollPane scrollPane;
Thread thread; public Client()
{ panel = (JPanel) this.getContentPane();
txtMessages = new JTextArea(25, 35);
scrollPane = new JScrollPane(txtMessages);
panel.setLayout(new BorderLayout());
connectBtn = new JButton("连接");
send = new JButton("发送");
send.addActionListener(this);
connectBtn.addActionListener(this);
panel.setLayout(new FlowLayout());
panel.add(scrollPane);
panel.add(connectBtn);
panel.add(send);
this.setSize(700, 400);
try
{
toServer = new Socket("127.0.0.1", 5555);
streamFromServer = new DataInputStream(toServer.getInputStream());
streamToServer = new DataOutputStream(toServer.getOutputStream());
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
thread = new Thread(this); } @Override
public void actionPerformed(ActionEvent arg0)
{
// TODO Auto-generated method stub
if ( arg0.getSource() == connectBtn )
{
try
{
streamToServer.writeUTF("login");
thread.start();
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
if ( arg0.getSource() == send )
{
try
{
streamToServer.writeUTF("send");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} @Override
public void run()
{
while (true)
{
// TODO Auto-generated method stub
String msg = "";
String s = "";
try
{
msg = streamFromServer.readUTF();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
if ( msg.equals("login") )
{ try
{
s += streamFromServer.readUTF();
s += "\n";
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
txtMessages.setText(s); }
if ( msg.equals("send") )
{ try
{ s += streamFromServer.readUTF();
s += "\n"; txtMessages.setText(s); }
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}}为什么按发送按钮没反应?????

解决方案 »

  1.   

    你调试过吗? Debug 或者写一些输出信息
      

  2.   

    调试过了, 按发送的时候有向服务器发送streamToServer.writeUTF("send");
    但服务器收不到, 不知道是什么原因
      

  3.   

    try
                {
                    fromClient = serverSocket.accept();
                    streamToClient = new DataOutputStream(fromClient
                            .getOutputStream());
                    streamFromClient = new DataInputStream(fromClient
                            .getInputStream());
                    msg = streamFromClient.readUTF();
                }是不是这里错了,你怎么在线程里面去accept,那样就失去了多线程的意义,在此线程里面程序将阻塞在
     fromClient = serverSocket.accept();
    而不能一直循环
    改为
    serverSocket = new ServerSocket(5555);
                fromClient = serverSocket.accept();
                serverThread = new MyThread(fromClient );
                serverThread.start();写一个内部类class MyThread{
         private Socket s;
         public MyThread(Socket s){
            this.s=s;
         }
         public void run(){.......}
    }
      

  4.   

    改一下上面的回复
    class MyThread extends Thread{
         private Socket s;
         public MyThread(Socket s){
            this.s=s;
         }
         public void run(){.......}
    }没仔细看你的程序,但感觉这地方没有对