Linux编程4.8 网络编程-建立连接

2024-03-19 00:36

本文主要是介绍Linux编程4.8 网络编程-建立连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、服务器端

#include <sys/types.h>       #include <sys/socket.h>int listen(int sockfd, int backlog);返回:成功返回0,出错返回-1。参数:sockfd:套接字的文件描述符backlog:定义了sockfd的挂起连接队列可能增长的最大长度。int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);参数:sockfd:套接字的文件描述符。addr:指向sockaddr结构的指针。这个结构是用通信层已知的对等套接字的地址填充的。addrlen:结果参数,返回时,它将包含对等地址的实际大小。

示例:
在这里插入图片描述

2、客户端

#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);返回:成功返回0,出错返回-1。功能:系统调用将文件描述符sockfd引用的套接字连接到addr指定的地址。参数:addrlen:指定addr的大小。addr:要连接的服务器地址,其中地址的格式由套接字sockfd的地址空间决定

示例:
在这里插入图片描述

3、服务器完整示例

nt main(void)
{//1. 创建套接字int serverfd = socket(AF_INET, SOCK_STREAM, 0);if(serverfd < 0){perror("创建套接字失败");exit(1);}//2. 绑定套接字struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(PORT);addr.sin_addr.s_addr = INADDR_ANY;if(bind(serverfd, (struct sockadr*)&addr, sizeof(addr)) < 0){perror("绑定套接字失败");exit(1);}//3. 监听if(listen(serverfd, 5) < 0){perror("监听套接字失败");exit(1);}struct sockaddr_int client_addr;socklen_t client_len = sizeof(client_addr);fd_set fds, tds;FD_ZERO(&fds);FD_SET(serverfd, &fds);//4. 接受while(1){tds = fds;//使用select同时监听serverfd与其他若干clientfd,int ret = select(FD_SETSIZE, &tds, NULL, NULL, NULL);if(ret < 0){perror("");exit(1);}else if(ret > 0){//准备好了int i = 0, j = 0;for(i = 3; i < FD_SETSIZE && j < ret; i++){if(FD_ISSET(i, &tds)){//有东西可读j++;if(i == serverfd){//需要acceptint clientfd = 0;if((clientfd = accept(serverfd, (struct sockaddr*)&client_addr, &client_len)) < 0){perror("");exit(1);}else{//接受成功printf("新的连接:ip:%s port:%d\n", inet_ntop(client_addr.sin_addr.s_addr), ntohs(client_addr.sin_port));FD_SET(clientfd, &fds);}}else{char str[1024] = "";//客户端读取if(read(i, str, sizeof(str)) == 0){//套接字关闭FD_CLR(i, &fds);close(i);}else{//switch(){}}}}}}else{}}return 0;
}

4、客户端完整示例

int main(void)
{//1. 创建套接字client_sockfd = socket(AF_INET, SOCK_STREAM, 0);if(client_sockfd < 0){perror("");exit(1);}//2. 连接struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);addr.sin_port = htons(12000);if(connect(client_sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0){perror("");exit(1);}pthread_t pid;pthread_attr_t attr;	pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);pthread_create(&pid, &attr, pthread_recv, &client_sockfd);main_menu();//	循环close(client_sockfd);return 0;
}

这篇关于Linux编程4.8 网络编程-建立连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824221

相关文章

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效