#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <signal.h> int serverSocket,clientSocket; void hand(int val){ //7. 关闭连接 close(serverSocket); close(clientSocket); printf("bye bye!\n"); exit(0); } int main(int argc,char* argv[]){ if(argc != 3) printf("请输入ip地址和端口号!\n"),exit(0); printf("ip: %s port:%d\n",argv[1],atoi(argv[2])); signal(SIGINT,hand); //1. 创建socket 参数一: 协议类型(版本) 参数二: 通信媒介 参数三: 保护方式 serverSocket = socket(AF_INET,SOCK_STREAM,0); if(-1 == serverSocket) printf("创建socket失败:%m\n"),exit(-1); printf("创建socket成功!\n"); //2. 创建服务器协议地址簇 struct sockaddr_in sAddr = { 0 }; sAddr.sin_family = AF_INET; //协议类型 和socket函数第一个参数一致 sAddr.sin_addr.s_addr = inet_addr(argv[1]); //将字符串转整数 sAddr.sin_port = htons(atoi(argv[2])); //将字符串转整数,再将小端转换成大端 //3. 绑定服务器协议地址簇 int r = bind(serverSocket,(struct sockaddr*)&sAddr,sizeof sAddr); if(-1 == r) printf("绑定失败:%m\n"),close(serverSocket),exit(-2); printf("绑定成功!\n"); //4. 监听 r = listen(serverSocket,10); if(-1 == r) printf("监听失败:%m\n"),close(serverSocket),exit(-3); printf("监听成功!\n"); //5. 接收客户端连接 struct sockaddr_in cAddr = {0}; int len = sizeof(sAddr); clientSocket = accept(serverSocket,(struct sockaddr*)&cAddr,(socklen_t*)&len); if(-1 == clientSocket) printf("接收客户端连接失败:%m\n"),close(serverSocket),exit(-1); printf("有客户端连接上服务器了: %s\n",inet_ntoa(cAddr.sin_addr)); //6. 通信 char buff[256] = {0}; while(1){ r = recv(clientSocket,buff,255,0); if(r > 0){ buff[r] = 0; printf("客户端说>> %s\n",buff); } } return 0; }
时间: 2024-04-26 17:21:29 浏览: 20
这是一段使用C语言实现的TCP服务器程序。它的主要流程如下:
1. 创建socket:使用socket函数创建一个套接字,指定协议类型为IPv4、通信媒介为流式(socket)、保护方式为默认(0)。
2. 创建服务器协议地址簇:创建一个sockaddr_in结构体,用来表示服务器的协议地址簇。其中sin_family成员指定协议类型,sin_addr成员指定IP地址,sin_port成员指定端口号。
3. 绑定服务器协议地址簇:使用bind函数将服务器的协议地址簇与套接字进行绑定,以便客户端可以连接到服务器。
4. 监听:使用listen函数开始监听客户端的连接请求。
5. 接收客户端连接:使用accept函数接收客户端的连接请求,并返回一个新的套接字用于与该客户端进行通信。
6. 通信:使用recv函数接收客户端发送的数据,并进行处理。在这个程序中,它只是简单地将数据打印出来。
7. 关闭连接:当程序收到SIGINT信号时,会执行hand函数来关闭连接,并退出程序。
需要注意的是,这个程序只是一个简单的示例,没有进行错误处理和异常情况的处理。在实际应用中,需要对各种异常情况进行处理,以保证服务器的稳定性和安全性。
相关问题
#include <fcntl.h> #include <unistd> #include <sys/ioctl> #include <sys/time>qt里面定义出错
#include <fcntl.h>是C/C++中的一个头文件,定义了一些文件控制相关的宏和函数。例如,open()函数就是在这个头文件中定义的。在使用这个头文件时,需要注意一些编译器的不同,可能会导致一些定义出现错误。同时,<unistd.h>和<sys/ioctl.h>也是一些常用的系统调用头文件。而<sys/types.h>、<sys/socket.h>、<netdb.h>、<stdio.h>、<stdlib.h>、<string.h>、<ctype.h>、<errno.h>、<malloc.h>、<netinet/in.h>、<arpa/inet.h>、<stdarg.h>等头文件也都是C/C++中常用的头文件,定义了很多系统调用函数和宏。
关于在Qt中出现include头文件定义错误,可能是因为Qt中的一些宏与C/C++中常用的宏冲突了,需要进行一些修改和调整。
前6行程序输出。 C/C++ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <signal.h>
这段程序是C/C++代码,包含了5个头文件。第一个头文件<stdio.h>提供了标准输入输出函数,第二个头文件<stdlib.h>提供了一些常用的函数和类型定义,第三个头文件<sys/types.h>定义了系统调用所需的数据类型,第四个头文件<unistd.h>提供了一些通用的系统服务函数,最后一个头文件<signal.h>提供了信号处理的相关函数和数据类型。
这段代码并没有输出语句,所以程序不会有任何输出。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)