Socket编程-TCP与UDP的区别

TCP协议和UDP协议连接过程的区别
1.基于连接(TCP)与无连接()UDP;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式(TCP)与数据报模式(UDP);

5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

对于C语言来说,可以使用Socket编程来实现TCPUDP网络通信。 1. TCP实现: - 首先,创建一个TCP服务器和客户端的Socket对象: ```c int serverSocket = socket(AF_INET, SOCK_STREAM, 0); int clientSocket = socket(AF_INET, SOCK_STREAM, 0); ``` - 然后,设置服务器和客户端的地址结构: ```c struct sockaddr_in serverAddr; struct sockaddr_in clientAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); // 设置端口号 serverAddr.sin_addr.s_addr = INADDR_ANY; clientAddr.sin_family = AF_INET; clientAddr.sin_port = htons(port); // 设置服务器端口号 clientAddr.sin_addr.s_addr = inet_addr(serverIP); // 设置服务器IP ``` - 接下来,绑定服务器Socket到地址和端口: ```c bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)); ``` - 然后,监听客户端连接请求: ```c listen(serverSocket, 5); // 同时处理5个连接请求 ``` - 客户端连接服务器: ```c connect(clientSocket, (struct sockaddr *)&clientAddr, sizeof(clientAddr)); ``` - 进行读写操作,收发数据: ```c // 服务器端 int clientSocket = accept(serverSocket, NULL, NULL); // 接受客户端连接请求 char buffer[1024]; recv(clientSocket, buffer, sizeof(buffer), 0); // 接收数据 send(clientSocket, buffer, sizeof(buffer), 0); // 发送数据 // 客户端 char buffer[1024]; send(clientSocket, buffer, sizeof(buffer), 0); // 发送数据 recv(clientSocket, buffer, sizeof(buffer), 0); // 接收数据 ``` 2. UDP实现: - 首先,创建一个UDP服务器和客户端的Socket对象: ```c int serverSocket = socket(AF_INET, SOCK_DGRAM, 0); int clientSocket = socket(AF_INET, SOCK_DGRAM, 0); ``` - 然后,设置服务器和客户端的地址结构: ```c struct sockaddr_in serverAddr; struct sockaddr_in clientAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); // 设置端口号 serverAddr.sin_addr.s_addr = INADDR_ANY; clientAddr.sin_family = AF_INET; clientAddr.sin_port = htons(port); // 设置服务器端口号 clientAddr.sin_addr.s_addr = inet_addr(serverIP); // 设置服务器IP ``` - 接下来,绑定服务器Socket到地址和端口: ```c bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)); ``` - 进行读写操作,收发数据: ```c // 服务器端 char buffer[1024]; struct sockaddr_in clientAddr; int len = sizeof(clientAddr); recvfrom(serverSocket, buffer, sizeof(buffer), 0, (struct sockaddr *)&clientAddr, &len); // 接收数据 sendto(serverSocket, buffer, sizeof(buffer), 0, (struct sockaddr *)&clientAddr, len); // 发送数据 // 客户端 char buffer[1024]; sendto(clientSocket, buffer, sizeof(buffer), 0, (struct sockaddr *)&serverAddr, sizeof(serverAddr)); // 发送数据 recvfrom(clientSocket, buffer, sizeof(buffer), 0, NULL, NULL); // 接收数据 ``` 以上是简单的示例代码,实现了基本的TCPUDP通信功能。在实际应用中,可能还需要处理异常情况、错误处理、多线程等。对于更详细的实现,请参考相关网络编程的教程和文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大匣

你的鼓励是我创作最大动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值