c语言tcp和udp的实现
时间: 2023-11-09 18:02:14 浏览: 174
在C语言中,可以使用socket库来实现TCP和UDP协议的通信。具体实现步骤如下:
1. 创建socket:使用socket()函数创建一个socket,指定协议类型(TCP或UDP)和传输层协议(IPv4或IPv6)。
2. 绑定地址:使用bind()函数将socket与本地IP地址和端口号绑定。
3. 监听连接(TCP):对于TCP协议,使用listen()函数开始监听连接请求。
4. 接受连接(TCP):对于TCP协议,使用accept()函数接受客户端的连接请求,并返回一个新的socket用于与客户端通信。
5. 发送和接收数据:使用send()和recv()函数发送和接收数据。
6. 关闭连接:使用close()函数关闭socket连接。
以下是一个简单的TCP服务器示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define MAXLINE 1024
int main() {
int listenfd, connfd;
struct sockaddr_in servaddr, cliaddr;
char buf[MAXLINE];
int n;
// 创建socket
listenfd = socket(AF_INET, SOCK_STREAM, 0);
// 绑定地址
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
// 监听连接
listen(listenfd, 5);
printf("server start listening on port %d...\n", PORT);
while (1) {
// 接受连接
socklen_t clilen = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen);
printf("accept a new connection from %s:%d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
// 接收数据
while ((n = recv(connfd, buf, MAXLINE, 0)) > 0) {
buf[n] = '\0';
printf("recv: %s\n", buf);
// 发送数据
send(connfd, buf, n, 0);
}
// 关闭连接
close(connfd);
}
return 0;
}
```
阅读全文