import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.io.IOException;
import java.util.*;
class ServerDemo{
public static void main(String[] args){
int sPort;
ServerSocket sSocket=null;
Socket cSocket=null; try{
sPort=6000;  //设置服务器的端口号
sSocket=new ServerSocket(sPort);  //创建监听ServerSocket套接字
while(true){
cSocket=sSocket.accept(); 
ServerThread aa=new ServerThread(cSocket);
Thread r=new Thread(aa);
r.start(); } }catch(IOException e){
System.out.println("套接字、输入输出流创建失败或网络IO出现错误."); }
}
}class ServerThread implements Runnable
{
PrintStream writer=null; //发送消息
Scanner in=null;//接收消息
Socket socket;
Scanner in2=null;
ServerThread(Socket socket)
{
this.socket=socket;
} public void run()
{
try{
in=new Scanner(socket.getInputStream());
writer=new PrintStream(socket.getOutputStream());
String msg=in.nextLine();
writer.println("welcome");
while(true)
{
if(msg.equals("bye")) break;
System.out.println(msg);
in2=new Scanner(System.in);
writer.println(in2);

}
}catch(Exception e){}
}

}这个是服务器端,不用线程时,可以与客户端通信.  我想可以响应多个用户,可是用多线程以后,,消息直接不能传了.是线程写错了吗?
哪位帮忙看一下.谢谢/.下面是客户端.import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintStream;
import java.io.IOException;
class ClientDemo{
public static void main(String[] args){
int serverPort;
String serverHost;
Socket cSocket=null;
BufferedReader reader=null;
PrintStream writer=null;
String receiveMsg;
String msg="This is the message from the client.";
try{
serverPort=6000;
serverHost="127.0.0.1";
cSocket=new Socket(serverHost,serverPort);
reader=new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
writer=new PrintStream(cSocket.getOutputStream());
//先接收服务器发送过来的Hello信息
receiveMsg=reader.readLine();
System.out.println(receiveMsg);
//再向服务器发送信息
writer.println(msg);
//关闭套接字,然后退出.
reader.close();
writer.close();
cSocket.close();
}
catch(IOException e){
System.out.println("创建套接字、输入输出流或网络IO出错:"+e);
try{
if(reader!=null) reader.close();
if(writer!=null) writer.close();
if(cSocket!=null) cSocket.close();
}catch(IOException e2){}
}
}
}

解决方案 »

  1.   

    下面这程序和你的相仿,参照一下吧!
    客户端:
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;public class ChatClient extends Frame {
    Socket s = null;
    DataOutputStream dos = null; TextField tfTxt = new TextField(); TextArea taContent = new TextArea(); public static void main(String[] args) {
    new ChatClient().launchFrame(); 
    } public void launchFrame() {
    setLocation(400, 300);
    this.setSize(300, 300);
    add(tfTxt, BorderLayout.SOUTH);
    add(taContent, BorderLayout.NORTH);
    pack();
    this.addWindowListener(new WindowAdapter() { @Override
    public void windowClosing(WindowEvent arg0) {
    disconnect();
    System.exit(0);
    }

    });
    tfTxt.addActionListener(new TFListener());
    setVisible(true);
    connect();
    }

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

    }

    public void disconnect() {
    try {
    dos.close();
    s.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    private class TFListener implements ActionListener { public void actionPerformed(ActionEvent e) {
    String str = tfTxt.getText().trim();
    taContent.setText(str);
    tfTxt.setText("");

    try {
    //System.out.println(s);
    dos.writeUTF(str);
    dos.flush();
    //dos.close();
    } catch (IOException e1) {
    e1.printStackTrace();
    }

    }

    }}服务端:
    import java.io.*;
    import java.net.*;public class ChatServer {
    boolean started = false;
    ServerSocket ss = null;

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

    public void start() {
    try {
    ss = new ServerSocket(8888);
    started = true;
    } catch (BindException e) {
    System.out.println("端口使用中....");
    System.out.println("请关掉相关程序并重新运行服务器!");
    System.exit(0);
    } catch (IOException e) {
    e.printStackTrace();
    }

    try {

    while(started) {
    Socket s = ss.accept();
    Client c = new Client(s);
    System.out.println("a client connected!");
    new Thread(c).start();
    //dis.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    ss.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    class Client implements Runnable {
    private Socket s;
    private DataInputStream dis = null;
    private boolean bConnected = false;

    public Client(Socket s) {
    this.s = s;
    try {
    dis = new DataInputStream(s.getInputStream());
    bConnected = true;
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    public void run() {
    try {
    while(bConnected) {
    String str = dis.readUTF();
    System.out.println(str);
    }
    } catch (EOFException e) {
    System.out.println("Client closed!");
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    if(dis != null) dis.close();
    if(s != null) s.close();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    }

    }
    }