当前位置: 首页> 娱乐> 影视 > 国家工程项目查询公示平台_seo引擎优化服务_南京网站快速排名提升_网页seo搜索引擎优化

国家工程项目查询公示平台_seo引擎优化服务_南京网站快速排名提升_网页seo搜索引擎优化

时间:2025/7/17 18:25:04来源:https://blog.csdn.net/qq_31860647/article/details/142290373 浏览次数:0次
国家工程项目查询公示平台_seo引擎优化服务_南京网站快速排名提升_网页seo搜索引擎优化

先介绍一下TCP和UDP两种连接方式的区别,TCP连接是类似于打电话一样的,你拨一个已经存在的号码,然后对方接听了你们就可以进行通话,彼此间是一个连通状态,这种方式可靠性很好,你说的话对方都能回复,你能判断对方是否接收到你的消息。而UDP则类似于发信息和发邮件一样的方式,朝着某个地址发数据,对方收不收得到也不管,这种方式可靠性较低,数据有丢失风险并且自身也不会知道。

下面开始演示Java如何两种方式的连接:

TCP

定义一个服务端类:

package com.huajieyu.code.y2024.sept.at0915d;import org.junit.jupiter.api.Test;import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;public class TCPServer {public static void main(String[] args) {try (// 创建服务端对象,用于接收客户端的请求,并把服务端口设置为8888ServerSocket serverSocket = new ServerSocket(8888);) {while(true){// 调用accept等待被连接Socket accept = serverSocket.accept();InputStream is = accept.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String string = br.readLine();System.out.println("From client:" + string);}} catch (Exception e) {e.printStackTrace();}}}

定义一个客户端类:

package com.huajieyu.code.y2024.sept.at0915d;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;public class TCPClient {public static void main(String[] args) throws IOException {String host = "127.0.0.1";int port = 8888;InetAddress address = InetAddress.getByName(host);try (// 定义客户端的服务,连接本地的8888端口Socket socket = new Socket(address, port);OutputStream outputStream = socket.getOutputStream();) {// 给服务端发送一句话outputStream.write("你好老兄!".getBytes());Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}}
}

下面把两个类启动,客户端一启动就需要连接服务端,所以需要先启动服务端的代码。

再启动客户端,会发现服务端的控制台接收到消息,服务端有while(true)所以会一直挂着等待客户端的请求。客户端启动后会给服务端发送消息然后正常结束。但是服务端还在启动着,客户端可以执行多次,能给服务端发送多次消息,下面是执行了3次的效果:

From client:你好老兄!
From client:你好老兄!
From client:你好老兄!

UDP

创建一个发送端:

package com.huajieyu.code.y2024.sept.at0915d;import java.net.*;public class UDPServer {public static void main(String[] args) {try (// 创建服务端对象,用于接收客户端的请求,并把服务端口设置为9999DatagramSocket socket = new DatagramSocket(9999);) {// 为了演示,这里加个while循环重复发送消息while (true) {String str = "Hello UDP client";// 指定数据和发送的目标位置DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("localhost"), 9888);socket.send(dp);}} catch (Exception e) {e.printStackTrace();}}
}

创建一个接收端:

package com.huajieyu.code.y2024.sept.at0915d;import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UDPClient {public static void main(String[] args) {try (// 创建接收端对象,用于接收发送端的数据,把服务端口设置为9888DatagramSocket socket = new DatagramSocket (9888);) {byte [] bytes = new byte[24];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);socket.receive(dp);byte[] data = dp.getData();String str = new String(data);System.out.println("接收到消息:" + str);} catch (Exception e) {e.printStackTrace();}}
}

启动的时候先启动哪一个都行。但是如果先启动了接收端,那么很快就会结束了,啥也没收到,因为消息还没开始发。所以建议先启动发送端,发送端如果只发送一次,此时如果接收端没有启动,那这个就不知道该往哪里发,程序很快也会结束。除非说发送端和接收端恰好同时在运行,这样接收端和发送端才能正常处理消息。所以为了演示我这里把发送端的发送逻辑给重复执行,先启动发送端,然后再启动接收端,此时接收端就能正常接收消息了。

效果如下:

接收到消息:Hello UDP client        Process finished with exit code 0

TCP/UDP的通信大致如上。

关键字:国家工程项目查询公示平台_seo引擎优化服务_南京网站快速排名提升_网页seo搜索引擎优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: