c语言编写socket客户端和服务端,使⽤TCP或者UDP通信。
时间: 2024-03-13 20:48:18 浏览: 131
好的,以下是使用C语言编写socket客户端和服务端的示例代码。
## TCP通信示例
### 服务端
以下是一个使用TCP协议实现的服务端示例代码,它接收客户端发送的数据并将其打印出来:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#define PORT 8888
int main()
{
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// 创建socket文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
{
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置socket选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
// 设置socket地址结构
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定socket和地址结构
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0)
{
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听socket
if (listen(server_fd, 3) < 0)
{
perror("listen");
exit(EXIT_FAILURE);
}
// 等待客户端连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0)
{
perror("accept");
exit(EXIT_FAILURE);
}
// 接收客户端发送的数据并打印出来
while(1)
{
valread = read(new_socket, buffer, 1024);
printf("%s\n", buffer);
send(new_socket, hello, strlen(hello), 0);
}
return 0;
}
```
### 客户端
以下是一个使用TCP协议实现的客户端示例代码,它向服务端发送数据并接收服务端返回的数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
int main(int argc, char const *argv[])
{
int sock = 0, valread;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[1024] = {0};
// 创建socket文件描述符
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("\n Socket creation error \n");
return -1;
}
// 设置socket地址结构
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 将IP地址从点分十进制转换为网络字节序
if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0)
{
printf("\nInvalid address/ Address not supported \n");
return -1;
}
// 连接到服务端
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
printf("\nConnection Failed \n");
return -1;
}
// 发送数据到服务端
send(sock, hello, strlen(hello), 0);
printf("Hello message sent\n");
// 接收服务端返回的数据并打印出来
valread = read(sock, buffer, 1024);
printf("%s\n", buffer);
return 0;
}
```
## UDP通信示例
### 服务端
以下是一个使用UDP协议实现的服务端示例代码,它接收客户端发送的数据并将其打印出来:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
int main(int argc, char const *argv[])
{
int sockfd;
char buffer[1024];
struct sockaddr_in servaddr, cliaddr;
// 创建socket文件描述符
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
// 设置socket地址结构
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
// 绑定socket和地址结构
bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
// 接收客户端发送的数据并打印出来
while(1)
{
socklen_t len = sizeof(cliaddr);
int n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&cliaddr, &len);
buffer[n] = '\0';
printf("%s\n", buffer);
}
return 0;
}
```
### 客户端
以下是一个使用UDP协议实现的客户端示例代码,它向服务端发送数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
int main(int argc, char const *argv[])
{
int sockfd;
char buffer[1024];
struct sockaddr_in servaddr;
// 创建socket文件描述符
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
// 设置socket地址结构
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
// 发送数据到服务端
sendto(sockfd, "Hello, world", strlen("Hello, world"), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
return 0;
}
```
以上就是一个基本的Socket编程示例,如果您还有什么问题可以继续问我哦。
阅读全文
相关推荐


















