【Socket】二、UDP协议与TCP协议通讯示例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43227967/article/details/90265418

二、UDP协议 

三、TCP协议

3.4、三次握手与四次分手

 四、网络通讯容易遇到的BUG

4.1、Address already in use : JVM_Bind

4.2、Connection refused:connet


【Socket】一、Socket概述

【Socket】二、UDP协议与TCP协议通讯示例

【Socket】三、Socket使用线程池支持多个线程同时访问

首先玩这个需要知道本机IP地址,那么,Windows + R - > CMD ->输入命令 ipconfig

如图找到IP地址

一、配置Socket端口号与IP地址

public class SocketConfig {

    /** IP地址,每台主机IP都不同,请修改 */
    public static final String IP_ADDRESS = "192.168.**.***";

    /** 端口号 */
    public static final Integer PORT = 8088;

}

二、UDP协议 

2.1、 UDP服务端类

public class UdpServer {

	public static void main(String[] args) throws IOException {

		System.out.println("udp接受数据启动.......");

		DatagramSocket ds = new DatagramSocket(SocketConfig.PORT);

		byte[] buf = new byte[1024];

		DatagramPacket dp = new DatagramPacket(buf, buf.length);

		// 阻塞效果
		ds.receive(dp);

		System.out.println("来源:" + dp.getAddress().getHostAddress() + ",port:" + dp.getPort());

		String str = new String(dp.getData(),0,dp.getLength());

		System.out.println("客户端发送数据:"+str);

		ds.close();
		
	}

}

2.2、UDP客户端类

public class UdpClient {

	public static void main(String[] args) throws IOException {

		System.out.println("udp 发送数据");

		DatagramSocket ds = new DatagramSocket();

		String str = "客户端发送数据....";

		byte[] strByte = str.getBytes();

		DatagramPacket dp = new DatagramPacket(strByte,
				strByte.length, InetAddress.getByName(SocketConfig.IP_ADDRESS),
				SocketConfig.PORT
		);

		ds.send(dp);
		ds.close();

	}

}

2.3、运行结果

2.4、UDP说明

QQ使用的协议即是UDP,不管接受者是否在线,信息也会发送过去。不管连不连接。

且UDP协议与TCP服务是不互通的,也就是说通过UDP协议开启的端口浏览器是访问不到的。

但TCP可以做到,因为HTTP默认TCP。 PS:UDP协议毫无反应

以下即是TCP协议通过浏览器访问后打印的数据,虽然页面是无展示,但服务器会有数据

三、TCP协议

3.1、服务端类

public class TcpServer {

	 public static void main(String[] args) throws IOException {

		System.out.println("socket服务器端启动....");

		ServerSocket serverSocket = new ServerSocket(SocketConfig.PORT);

	    //获取客户端对象
		Socket accept = serverSocket.accept();

		InputStream inputStream = accept.getInputStream();

		byte[] buf= new byte[1024];

		int len=inputStream.read(buf);

		String str =new String(buf,0,len);

		System.out.println("str:" + str);

		serverSocket.close();

	}
	
}

3.2、客户端类

public class TcpClinet {

	public static void main(String[] args) throws IOException {

		System.out.println("socket启动....");

		Socket s = new Socket(SocketConfig.IP_ADDRESS, SocketConfig.PORT);

		OutputStream outputStream = s.getOutputStream();

		outputStream.write("我是客戶端....".getBytes());

		s.close();

	}

}

3.3、运行结果

3.4、三次握手与四次分手

3.4.1 三次握手

来一个流程图

3.4.2 四次分手

四次分手的传递过程其实就是三次握手的过程的一个反转,这里就不详细说明。PS:自行脑补 /手动滑稽

3.5、使用场景

HTTP协议即是TCP协议

 四、网络通讯容易遇到的BUG

4.1、Address already in use : JVM_Bind

将TCP协议服务的端口改为一个已使用的端口,比如说8080,或者是开两个服务使用一样的端口,即会出现该错误,Tomcat端口号占用即是如此

4.2、Connection refused:connet

在不开启TCP服务类时,开启TCP客户端即会抛出该异常

该错误意思为连接被拒绝,有两种原因:

1.、连接超时

2、连接端口并未开启,或已经关闭 (当前演示的是这个原因)

猜你喜欢

转载自blog.csdn.net/qq_43227967/article/details/90265418