网络编程利器,C语言Socket编程实例大全!

IT技术2年前 (2023)发布 IT大王
0

大家好,我是IT大王网站的小编。今天要为大家分享的是网络编程利器——C语言Socket编程实例大全!

在当今网络时代,网络编程已经成为程序员必备的技能之一。而在网络编程中,Socket编程更是不可或缺的利器。作为最基础的网络编程技术之一,Socket编程可以轻松地实现进程间通信,使程序和服务端之间进行数据传输。

接下来,我们就来探讨Socket编程的实际应用,分享C语言Socket编程实例大全。让我们先来了解一下Socket编程的基础知识。

什么是Socket编程?

Socket编程是一种基于TCP/IP协议,实现网络通信的编程技术。Socket本质上是一个数据传输描述符,是一个数据传输端点。Socket编程可以将服务器和客户端之间的数据传输实现,而且只需要较少的编码量。

Socket编程的优势在于:

1. 简单易学:对于初学者而言,Socket编程相对于其他编程技术要更容易理解和上手。

2. 可靠性高:Socket编程可以保证数据传输的可靠性和稳定性,有利于实现服务端和客户端之间的高效通信。

3. 灵活性强:Socket编程可以根据需要进行数据传输的类型、传输方式等灵活设置,能够满足各种网络编程需求。

现在,我们来看一下C语言Socket编程实例大全,以帮助你更好地了解Socket编程知识。

1. 基础TCP Socket编程实例

下面是一个TCP Socket编程实例,可以实现两个计算器之间的通信:

“`

#include

#include

#include

#include

#include

#include

#define TRUE 1

#define PORT 8080

int main(int argc, char const *argv[]) {

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);

}

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, 5) < 0) {

perror(“listen”);

exit(EXIT_FAILURE);

}

// 接受新的客户端连接

if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {

perror(“accept”);

exit(EXIT_FAILURE);

}

// 读取客户端发来的消息

valread = read(new_socket, buffer, 1024);

printf(“%s\n”,buffer );

send(new_socket, hello, strlen(hello), 0);

printf(“Hello message sent\n”);

return 0;

}

“`

2. 基础UDP Socket编程实例

这个基本的UDP Socket编程实例可以让你了解如何实现UDP客户端和服务器之间的数据传输:

“`

#include

#include

#include

#include

#include

#include

#define PORT 8080

int main(int argc, char const *argv[]) {

int sockfd;

char buffer[1024];

char *hello = “Hello from client”;

struct sockaddr_in servaddr;

// 创建 UDP socket

if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {

perror(“socket creation failed”);

exit(EXIT_FAILURE);

}

memset(&servaddr, 0, sizeof(servaddr));

// 服务器信息设置

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(PORT);

servaddr.sin_addr.s_addr = INADDR_ANY;

int n, len;

// 发送消息到服务器

sendto(sockfd, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *) &servaddr, sizeof(servaddr));

printf(“Hello message sent.\n”);

// 接收服务器回传的消息

n = recvfrom(sockfd, (char *)buffer, 1024, MSG_WAITALL, (struct sockaddr *) &servaddr, &len);

buffer[n] = ‘\0’;

printf(“Server : %s\n”, buffer);

close(sockfd);

return 0;

}

“`

3. 多线程Socket编程实例

这个多线程Socket编程实例可以创建多个线程,在每个线程中处理一个客户端的请求。这里我们实现了一个简单的聊天室客户端和服务器:

“`

#include

#include

#include

#include

#include

#include

#include

#define PORT 8080

void *connection_handler(void *);

int main(int argc, char const *argv[]) {

int server_fd, new_socket, valread;

struct sockaddr_in address;

int opt = 1;

int addrlen = sizeof(address);

pthread_t thread;

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

}

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, 5) < 0) {

perror(“listen”);

exit(EXIT_FAILURE);

}

// 接受新的客户端连接

while ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))) {

printf(“New client connected\n”);

pthread_create(&thread, NULL, connection_handler, (void *)&new_socket);

}

return 0;

}

void *connection_handler(void *socket_desc) {

int sock = *(int*)socket_desc;

int valread;

char buffer[1024] = {0};

while ((valread = read(sock, buffer, 1024)) > 0) {

printf(“%s\n”, buffer);

send(sock, buffer, strlen(buffer), 0);

memset(buffer, 0, sizeof(buffer));

}

return 0;

}

“`

通过以上三个实例,我们可以更加深入地了解Socket编程的应用。同时也可以看出,Socket编程在实现网络通信方面具有重要的作用,可以广泛应用于各个领域中,如:聊天工具、小游戏、大型网站和云平台等。

希望今天我们的分享可以帮助你更好地理解Socket编程,并且也可以在你今后的编程过程中有所启发。如果你对Socket编程还有其他问题或者是建议,欢迎在评论区中留言,我们看到了会第一时间进行回复。

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章