我用多线程实现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().run()是调方法不是启线程