多线程之简单TCP应用未完待续........

多线程之简单TCP应用

/*
使用TCP协议发送数据
	创建发送端Socket对象(创建连接)
	获取输出流对象
	发送数据
	释放资源
 */
public class ClientDemo {
	public static void main(String[] args) throws IOException {
		System.out.println("Client");
		//创建发送端Socket对象(创建连接)
		Socket s = new Socket(InetAddress.getByName("127.0.0.1"),10086);
		//创建线程对象
		ClientThreadSend sent = new ClientThreadSend(s);
		ClientThreadReceive receive = new ClientThreadReceive(s);
		Thread t1 = new Thread(sent,"ClientSent");			
		Thread t2 = new Thread(receive,"ClientReceive");
		//启动线程
		t1.start();
		t2.start();
	}
}
/*
使用TCP协议接收数据
	创建接收端Socket对象
	监听(阻塞)
	获取输入流对象
	获取数据
	输出数据
	释放资源
 */
public class ServerDemo {
	public static void main(String[] args) throws IOException  {
		System.out.println("Server");
		//创建接收端Socket对象
		ServerSocket ss = new ServerSocket(10086);
		////监听(阻塞)
		Socket s = ss.accept();
		//创建线程对象
		ServerThreadSend sent = new ServerThreadSend(ss, s);
		ServerThreadReceive receive = new ServerThreadReceive(ss, s);
		Thread t1 = new Thread(sent,"ServerSent");
		Thread t2 = new Thread(receive,"ServerReceive");
		//启动线程
		t1.start();
		t2.start();
	}
}
public class ClientThreadSend implements Runnable {
	Socket s;
	public ClientThreadSend(Socket s){
		this.s = s;
	}
	@Override
	public void run() {
		while (true) {
			try {
				send(s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public synchronized void send(Socket s) throws IOException{
		//获取输出流对象
		OutputStream os = s.getOutputStream();
		//定义数据源
//		System.out.print("client:");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		line = br.readLine();
		//发送数据
		os.write(line.getBytes());
	}
}
public class ClientThreadReceive implements Runnable {
	Socket s;
	public ClientThreadReceive(Socket s){
		this.s = s;
	}
	@Override
	public void run() {
		while (true) {
			try {
				receive(s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
	}
	public synchronized void receive(Socket s) throws IOException{
		//获取输入流对象
		InputStream is = s.getInputStream();
		byte[] bys = new byte[1024];
		int len;//用于存储读取到的字节个数
		//接收数据
		len = is.read(bys);
		//输出数据
		System.out.print("server say:");
		System.out.println(new String(bys,0,len));
	}
}
public class ServerThreadReceive  implements Runnable {
	private ServerSocket ss;
	private Socket s;
	public ServerThreadReceive(ServerSocket ss,Socket s){
		this.ss = ss;
		this.s = s;
	}
	@Override
	public void run(){
		while (true) {
			try {
				receive(s);
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
	}
	public synchronized void receive(Socket s) throws IOException{
		//获取输入流对象
		InputStream is = s.getInputStream();
		//获取数据
		byte[] bys = new byte[1024];
		int len;//用于存储读取到的字节个数
		len = is.read(bys);
		String str = new String(bys,0,len);
		System.out.print("client say:");
		//输出数据
		System.out.println(str);	
	}
}
public class ServerThreadSend  implements Runnable {
	private ServerSocket ss;
	private Socket s;
	public ServerThreadSend(ServerSocket ss,Socket s){
		this.ss = ss;
		this.s = s;
	}
	@Override
	public void run(){
		while (true) {
			try {
				send(s);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public synchronized void send(Socket s) throws IOException{
		//获取输出流对象
		OutputStream os = s.getOutputStream();
		//定义数据源
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		line = br.readLine();
		//发送数据
		os.write(line.getBytes());
	}
}

猜你喜欢

转载自blog.csdn.net/m0_37755380/article/details/88967421
今日推荐