TCP实现服务器端与客户端通信

TCP实现服务器端接收客户端发送过来的消息。

服务器端:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class ServerDemo {

	public static void main(String[] args) throws IOException {
		
		/*
		 * 服务端接收客户端发送过来的数据
		 * 建立TCP服务端
		 * 1.创建socket服务,通过serverSocket对象(服务端必须对外提供一个端口)
		 * 2.获取连接过来的客户端对象
		 * 3.通过客户端对象获取socket流,读取客户端发来的数据,
		 * 	并打印在控制台上
		 * 4.关闭资源。关闭客户端,关闭服务器.因为服务器中保存了客户端对象,所以
		 * 	实际上客户端通过服务器通信还是两个客户端进行通信
		 * 
		 */
		//1.创建服务器对象
		ServerSocket ss=new ServerSocket(10000);
		//2.获取连接过来的客户端对象   Socket是客户端套接字
		Socket s=ss.accept();//阻塞式
		//获取客户端的ip地址
		String ip=s.getInetAddress().getHostAddress();
		//3.通过socket对象获取输入流,要读取客户端发过来的数据
		InputStream is=s.getInputStream();
		byte[] buf=new byte[1024];
		int len=is.read(buf);
		String str=new String(buf, 0, len);
		System.out.println(ip+"..."+str);
		s.close();
		ss.close();
		
	}
}

客户端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientDemo {

	public static void main(String[] args) throws UnknownHostException, IOException {
		
		/*
		 * 建立TCP客户端
		 * 1.创建TCP客户端的socket服务,使用的是socket对象
		 * 	创建对象时明确连接哪个服务器(通过ip与端口号)
		 * 2.如果连接成功,数据传输通道已经建立
		 * 	通道相当于socket流,包括输入流和输出流,这里我们需要的是输出流
		 * 	getOutputStream():获取输出流
		 * 3.使用输出流将数据写出
		 * 4.关闭资源
		 */
		// 客户端发送到服务器端
		//这里面的端口号为指向的服务器的端口号
		Socket s=new Socket(InetAddress.getLocalHost(), 10000);
		//获取socket流中的输出流
		OutputStream os=s.getOutputStream();
		//使用输出流将指定的数据写出去
		os.write("tcp演示,哥们来了...".getBytes());//因为os为字节流
		//关闭资源
		os.close();
		s.close();

	}

}

注意:先执行服务器端,再执行客户端。

运行结果:
在客户端控制台输出:
在这里插入图片描述