当前位置:实例文章 » 其他实例» [文章]socket编程代码示例

socket编程代码示例

发布人:shili8 发布时间:2025-02-02 05:02 阅读次数:0

**Socket 编程代码示例**

Socket 是一种用于网络通信的 API,它允许进程在同一个机器或不同的机器之间进行数据交换。Socket 编程是建立在 TCP/IP 协议之上的,提供了一个抽象层,使得开发者可以使用 socket 来实现各种网络应用。

**1. Socket 基础**

###1.1 Socket 类型socket 有两种类型:TCP (面向连接) 和 UDP (无连接)。TCP 是一种可靠的传输协议,它保证数据的完整性和顺序,而 UDP 是一种不可靠的传输协议,它不保证数据的完整性和顺序。

###1.2 Socket APIsocket API 提供了以下函数:

* `socket()`: 创建一个 socket* `bind()`: 绑定 socket 到特定的地址和端口* `listen()`: 开始监听 socket* `accept()`: 接受连接请求* `connect()`: 连接到远程 socket* `send()`: 发送数据* `recv()`: 接收数据* `close()`: 关闭 socket###1.3 Socket 通信流程socket 通信的流程如下:

1. 客户端创建一个 socket,并使用 `connect()` 函数连接到远程服务器。
2.服务器端创建一个 socket,并使用 `bind()` 和 `listen()` 函数绑定和监听 socket。
3. 当客户端发送数据时,服务器端使用 `accept()` 函数接收连接请求,并使用 `recv()` 函数接收数据。
4. 客户端使用 `send()` 函数发送数据给服务器端。
5.服务器端使用 `send()` 函数将数据返回给客户端。

**2. Socket 编程示例**

###2.1 TCP Server

c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.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";

 // 创建 socket 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);

 // 绑定 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 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("Connection accepted from client...
");

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

 printf("%s
", buffer);

 // 发送数据 send(new_socket, message, strlen(message),0);

 close(new_socket);
 }

 return0;
}


###2.2 TCP Client
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT8080int main() {
 int client_fd;
 struct sockaddr_in server_address;
 int addrlen = sizeof(server_address);
 char buffer[1024] = {0};
 char *message = "Hello from client";

 // 创建 socket if ((client_fd = socket(AF_INET, SOCK_STREAM,0)) ==0) {
 perror("socket failed");
 exit(EXIT_FAILURE);
 }

 server_address.sin_family = AF_INET;
 server_address.sin_port = htons(PORT);

 // 连接到远程服务器 if (connect(client_fd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
 perror("connect failed");
 exit(EXIT_FAILURE);
 }

 printf("Connected to server...
");

 // 发送数据 send(client_fd, message, strlen(message),0);

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

 printf("%s
", buffer);

 close(client_fd);

 return0;
}


###2.3 UDP Server
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.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";

 // 创建 socket 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);

 // 绑定 socket 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;
}


###2.4 UDP Client
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT8080int main() {
 int client_fd;
 struct sockaddr_in server_address;
 int addrlen = sizeof(server_address);
 char buffer[1024] = {0};
 char *message = "Hello from client";

 // 创建 socket if ((client_fd = socket(AF_INET, SOCK_DGRAM,0)) ==0) {
 perror("socket failed");
 exit(EXIT_FAILURE);
 }

 server_address.sin_family = AF_INET;
 server_address.sin_port = htons(PORT);

 // 连接到远程服务器 sendto(client_fd, message, strlen(message),0, (struct sockaddr *)&server_address, sizeof(server_address));

 printf("Connected to server...
");

 // 接收数据 recvfrom(client_fd, buffer,1024,0, (struct sockaddr *)&server_address, (socklen_t*)&addrlen);

 printf("%s
", buffer);

 close(client_fd);

 return0;
}


**3. Socket 编程注意事项**

* socket 通信时,需要考虑网络拥塞和丢包问题。
* socket 通信时,需要考虑数据的完整性和顺序问题。
* socket 通信时,需要考虑安全性问题,如加密和认证等。

**4. Socket 编程应用场景**

* socket 可用于建立远程服务器和客户端之间的通信。
* socket 可用于实现多人在线游戏和聊天室等功能。
* socket 可用于实现文件传输和共享等功能。

总之,socket 是一种非常强大的网络编程工具,它可以帮助开发者建立复杂的网络应用。

相关标签:github
其他信息

其他资源

Top