socket多线程

//修改yangkunlin的代码

服务器端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server{
	public static final int PORT=8888;
	public static void main(String args[])throws Exception{
	 System.out.println("服务器正在等待连接中...");	

	 Server server=new Server();
	 server.oper();
        	
		
	}
	
	public void oper()throws Exception{
	 	ServerSocket serverSocket=new ServerSocket(PORT);
	 	boolean flag=true;
	 	
	 	while(flag){
	 		System.out.println("连接之后输入exit就退出服务器端");
	 		Socket socket=serverSocket.accept();//进入阻塞状态,等待客户端的连接
	 		ServerThread serverThread=new ServerThread(socket);
	  	new Thread(serverThread).start();
                  String str=new BufferedReader(new InputStreamReader(System.in)).readLine();
	 	  if(str.equals("exit")){
	 	   socket.close();
	 	   flag=false;
	 	  }
	 		
	 	}
	}
};

class ServerThread implements Runnable{
	private Socket socket;
	public ServerThread(Socket socket){
	  this.socket=socket;	
	}
	public void run(){
	 try{
	 	//读取客户端的数据
	 	DataInputStream input=new DataInputStream(socket.getInputStream());
	 	//向客户端发送的数据
	 	DataOutputStream out=new DataOutputStream(socket.getOutputStream());
	  //读取客户端的数据
	  System.out.println("客户端传过来的数据:"+input.readUTF());
	  System.out.print("请输入:\t");
	  //发送键盘输入的一行
	  String s=new BufferedReader(new InputStreamReader(System.in)).readLine();	
	  out.writeUTF(s);
	  input.close();
	  out.close();
	 
	 }catch(Exception e){
	 	 System.out.println(e);
	 }	
		
		
		
	}
	
	
	
	}



客户端:
import java.net.Socket;
import java.net.*;
import java.io.*;
public class Client{
public static final int PORT=8888;
public static final String IP="localhost";

	public static void main(String args[])throws Exception{
	System.out.println("客户端..");
	System.out.println("当接收的\"bye\"的时候,客户端终止连接");	
	boolean flag=true;
	Socket client=null;
	while(flag){
	 client=new Socket(IP,PORT);	
	 //读取服务器端数据
	 DataInputStream input=new DataInputStream(client.getInputStream());
	 //向服务器端端发送的数据
	 DataOutputStream out=new DataOutputStream(client.getOutputStream());
	 System.out.print("请输入:\t");
	 //从键盘接收数据
	 String s=new BufferedReader(new InputStreamReader(System.in)).readLine();
	 out.writeUTF(s);
	 
	 //服务器端返回过来的数据
	 String recS=input.readUTF();
	 System.out.println("服务器端返回过来的数据:"+recS);
	 
	 if("bye".equals(recS)){
	 	
	  System.out.println("客户端将关闭");
	  Thread.sleep(500);	
	 	flag=false;
	 	
	 }
	}
		client.close();
		
		
	}
	
	
	
	
	
}

运行如下: socket多线程_第1张图片

你可能感兴趣的:(多线程,socket)