#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 19:21:29 浏览: 106
用c语言实现的逆序文本程序
这是一段使用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函数来关闭连接,并退出程序。
需要注意的是,这个程序只是一个简单的示例,没有进行错误处理和异常情况的处理。在实际应用中,需要对各种异常情况进行处理,以保证服务器的稳定性和安全性。
阅读全文