今天学习了一下系统间通信的方式之一,socket。Socket ServerSocket 是类似于管道通信的,一个Socket对应一个ServerSocket,为了解决多个客户端Socket 与ServrSocket通信,需要使用多线程。我是一名初学者,大家勿喷。代码如下:
服务端代码:
public class MultiUser extends Thread {
private Socket client;
public MultiUser(Socket c){
this.client = c;
}
public void run(){
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
while(true){
String str = in.readLine();
System.out.println("客户端输入:"+str);
out.println("服务端已经收到");
out.flush();
if(str.equals("end")){
break;
}
}
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(3333);
while(true){
MultiUser mu = new MultiUser(ss.accept());
mu.start();
}
}
}
客户端代码:
public class SocketClinetTest {
/**
* @param args
* @author zcc
* @throws IOException
* @throws UnknownHostException
* @date 2016-7-27上午10:56:18
*/
public static void main(String[] args) throws UnknownHostException, IOException {
//接收服务端
Socket server = new Socket(InetAddress.getLocalHost(),3333);
//写
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
//读
PrintWriter out = new PrintWriter(server.getOutputStream());
//键盘录入
BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
while(true){
String str =wt.readLine();
out.println(str);
//刷新内存缓冲区
out.flush();
if(str.equals("end")){
break;
}
System.out.println("服务端传递的值:"+in.readLine());
}
server.close();
}
}