Java网络编程之Tcp通信 (BIO) - 简单通信

1. 你需要了解以下知识:

  1. Tcp协议的原理。
  2. Java Socket是什么。

Tcp协议原理:

  1. TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内  另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
  2. 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体  的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

Java Socket:

  1. Java Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
  2. ServerSocket用于服务器端。
  3. Socket是建立网络连接时使用的。

2. 下面我们来写一个最简单的Client与Server之间的通信:

程序结构

Client类:

// 客户端
public class Client {

	public static void main(String[] args) throws Exception {
		// 创建客户端对象,并指明连接服务端的主机和端口
		Socket socket = new Socket("localhost", 8888);
		// 获取客户端的输入流对象
		Scanner scanner = new Scanner(socket.getInputStream());
		while (scanner.hasNextLine()) {
			System.out.println(scanner.nextLine());
		}
		scanner.close();
		socket.close();
	}
}

Server类:

// 服务端
public class Server {

	public static void main(String[] args) throws Exception {
		// 创建服务端,指定端口为88888
		ServerSocket serverSocket=new ServerSocket(8888);
		System.out.println("服务端已经准备就绪.....");
		// 接受连接该服务端的客户端对象
		boolean accept=true;
		while(accept){
			Socket socket=serverSocket.accept();
			System.out.println("连接过来的客户端:"+socket.getInetAddress());
			// 获取该客户端的输出流对象,给该客户端输出数据
			PrintStream out=new PrintStream(socket.getOutputStream());
			out.print("客户端你好!");
			out.close();
		}
		serverSocket.close();
	}
}
  • 这句不会执行的,但是要养成好的习惯要关闭流。
serverSocket.close();
  • 因为while是死循环,所以我们写了一个boolean变量这样就可以越过IDE工具的检查。这是为了写上面那句话!
boolean accept=true;

3. 小结: 

  1. 先要运行服务器,之后再运行客户端。
  2. 不要重复打开端口相同的服务器,不然会出现端口绑定异常。

4. 交流与分享:

  1. 如果你有什么不明白或有什么意见可以联系QQ:1097659198;

  2. 加群:884148378(一起讨论吧)或扫图:

Java网络编程之Tcp通信 (BIO) - 简单通信_第1张图片

 

 

 

 

你可能感兴趣的:(网络编程)