日期:2014-05-20  浏览次数:20829 次

Socket实现多线程通信问题
本帖最后由 liuwei0604 于 2013-02-28 15:27:04 编辑
我用多线程实现socket和serversocket之间的通信,serversocket和socket各开两个线程分别负责从对方那里得到消息和输出消息,那么需要一直保证这双方的两个线程都是工作的,我采用死循环的方法,让线程不断的从流里面读取数据。但是我每端两个线程始终只能工作一个,请问一下这个问题要怎么解决才行?

下面是我服务器端的代码:
用于服务器端读取消息的线程
public class ServerInput implements Runnable{
private ServerSocket server;
private Socket socket;

public ServerInput(Socket socket){
this.socket = socket;
}

public void run() {
try {
InputStream ins = socket.getInputStream();
while(true){

byte buffer []  = new byte [1024];
int length = 0;
String message = "客户端说:";
while((length = ins.read(buffer)) != -1){
message += new String(buffer,0,length,"UTF-8");
}
System.out.println(message);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



用于向客户端输出的线程
public class ServerOutput implements Runnable{

private ServerSocket server;
private Socket socket;

public ServerOutput(Socket socket){
this.socket = socket;
}

@Override
public void run() {
try{
 OutputStream out = socket.getOutputStream();
 while(true){

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine();
out.write(word.getBytes("UTF-8"));
out.flush();
 }

}catch(Exception e){
e.printStackTrace();
}
}

}



这是主类

public class Service {
public static void main(String args[]) throws Exception{
ServerSocket server = new ServerSocket(30000);
Socket socket = server.accept();
System.out.println("连接上了");
new ServerOutput(socket).run();
new ServerInput(socket).run();
}
}



多线程 socket 通信

------解决方案--------------------
引用:
引用:
启线程用start()不是run()
我这实现的不是Runnable接口么?

启动线程用调用start()不是run().run()是调方法不是启线程