当前位置:实例文章 » 其他实例» [文章]【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

发布人:shili8 发布时间:2024-11-16 21:56 阅读次数:0

**Socket 编程**

在计算机网络中,Socket 是一种用于进程间通信的 API。它允许不同进程之间通过网络进行数据交换。Socket 编程是建立在 TCP/IP 协议栈之上的一个应用层协议。

本文将介绍 TCP服务器、UDP服务器和本地套接字的编程实现,使用 C语言作为示例代码。

### TCP服务器TCP (Transmission Control Protocol) 是一种面向连接的传输协议。它保证数据在网络中准确无误地传递给对方。

#### TCP服务器代码

c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define PORT8080int main() {
 int server_fd, new_socket;
 struct sockaddr_in address;
 int addrlen = sizeof(address);
 char buffer[1024] = {0};
 char *message = "Hello from server";

 // 创建 TCP 套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM,0)) ==0) {
 perror("socket failed");
 exit(EXIT_FAILURE);
 }

 address.sin_family = AF_INET;
 address.sin_addr.s_addr = INADDR_ANY;
 address.sin_port = htons(PORT);

 // 绑定套接字 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
 perror("bind failed");
 exit(EXIT_FAILURE);
 }

 // 监听连接 if (listen(server_fd,3) < 0) {
 perror("listen failed");
 exit(EXIT_FAILURE);
 }

 printf("Server listening on port %d...
", PORT);

 while (1) {
 // 接收新连接 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
 perror("accept failed");
 exit(EXIT_FAILURE);
 }

 printf("New connection from client...
");

 // 接收数据 read(new_socket, buffer,1024);

 printf("%s
", buffer);

 // 发送回复 send(new_socket, message, strlen(message),0);

 close(new_socket);
 }

 return0;
}

#### TCP服务器解释1. 创建一个 TCP 套接字使用 `socket()` 函数。
2. 绑定套接字到指定的 IP 地址和端口号使用 `bind()` 函数。
3. 监听连接使用 `listen()` 函数。
4. 接收新连接使用 `accept()` 函数。
5. 接收数据使用 `read()` 函数。
6. 发送回复使用 `send()` 函数。

### UDP服务器UDP (User Datagram Protocol) 是一种无连接的传输协议。它不保证数据在网络中准确无误地传递给对方。

#### UDP服务器代码
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define PORT8080int main() {
 int server_fd, new_socket;
 struct sockaddr_in address;
 int addrlen = sizeof(address);
 char buffer[1024] = {0};
 char *message = "Hello from server";

 // 创建 UDP 套接字 if ((server_fd = socket(AF_INET, SOCK_DGRAM,0)) ==0) {
 perror("socket failed");
 exit(EXIT_FAILURE);
 }

 address.sin_family = AF_INET;
 address.sin_addr.s_addr = INADDR_ANY;
 address.sin_port = htons(PORT);

 // 绑定套接字 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
 perror("bind failed");
 exit(EXIT_FAILURE);
 }

 printf("Server listening on port %d...
", PORT);

 while (1) {
 // 接收数据 recvfrom(server_fd, buffer,1024,0, (struct sockaddr *)&address, (socklen_t*)&addrlen);

 printf("%s
", buffer);

 // 发送回复 sendto(server_fd, message, strlen(message),0, (struct sockaddr *)&address, sizeof(address));
 }

 return0;
}

#### UDP服务器解释1. 创建一个 UDP 套接字使用 `socket()` 函数。
2. 绑定套接字到指定的 IP 地址和端口号使用 `bind()` 函数。
3. 接收数据使用 `recvfrom()` 函数。
4. 发送回复使用 `sendto()` 函数。

### 本地套接字本地套接字是指在同一台机器上创建的套接字。它不需要绑定到 IP 地址和端口号。

#### 本地套接字代码
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>

int main() {
 int server_fd, new_socket;
 char buffer[1024] = {0};
 char *message = "Hello from server";

 // 创建本地套接字 if ((server_fd = socket(AF_UNIX, SOCK_STREAM,0)) ==0) {
 perror("socket failed");
 exit(EXIT_FAILURE);
 }

 // 绑定本地套接字 struct sockaddr_un address;
 address.sun_family = AF_UNIX;
 strcpy(address.sun_path, "/tmp/socket");

 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
 perror("bind failed");
 exit(EXIT_FAILURE);
 }

 printf("Server listening on socket...
");

 while (1) {
 // 接收数据 new_socket = accept(server_fd, NULL, NULL);

 if (new_socket < 0) {
 perror("accept failed");
 exit(EXIT_FAILURE);
 }

 printf("New connection from client...
");

 // 接收数据 read(new_socket, buffer,1024);

 printf("%s
", buffer);

 // 发送回复 send(new_socket, message, strlen(message),0);

 close(new_socket);
 }

 return0;
}

#### 本地套接字解释1. 创建一个本地套接字使用 `socket()` 函数。
2. 绑定本地套接字到指定的路径使用 `bind()` 函数。
3. 接收数据使用 `accept()` 函数。
4. 接收数据使用 `read()` 函数。
5. 发送回复使用 `send()` 函数。

以上是 TCP服务器、UDP服务器和本地套接字的编程实现。这些示例代码可以帮助您理解 Socket 编程的基本概念和 API。

其他信息

其他资源

Top