本文设置一个简单的TCP服务器。
服务器的七大阶段:socket,bind,listen,accept,recv,send,close。服务器使用此7个同名函数来进行连接,监听,读写,关闭等动作。如下为man配置的API函数信息。
需要额外注意bind和accept的相应成员变量的强制类型转换。
1.socket
2.bind
3.listen
4.accept
5.recv
6.send
7.close
附加1.sockaddr_in结构体成员(使用 :!man 7 ip 命令查看)
如下为代码:
1 #include <stdlib.h> 2 #include <string.h> 3 #include <pthread.h> 4 #include <unistd.h> 5 #include <errno.h> 6 #include <sys/socket.h> 7 #include <arpa/inet.h> 8 #include <ctype.h> 9 #define len 1024 10 int main(int argc, char* argv[]) 11 { 12 int fuwuqi_socket_fd1,accept_fd; 13 char s[len]={0,}; 14 fuwuqi_socket_fd1=socket(AF_INET,SOCK_STREAM,0); 15 16 struct sockaddr_in fuwuqi; 17 fuwuqi.sin_family=AF_INET; 18 fuwuqi.sin_port=htons(12345); 19 fuwuqi.sin_addr.s_addr=inet_addr("192.168.25.128"); 20 21 bind(fuwuqi_socket_fd1,(struct sockaddr *)&fuwuqi,sizeof(fuwuqi)); 22 23 listen(fuwuqi_socket_fd1,1000); 24 25 struct sockaddr_in client; 26 socklen_t clientaddr_len=sizeof(struct sockaddr); 27 accept_fd=accept(fuwuqi_socket_fd1,(struct sockaddr *)&client,&clientaddr_len); 28 29 30 for(;;) 31 { 32 int ret=recv(accept_fd,(void*)s,len,0); 33 if(ret==0) 34 { 35 break; 36 } 37 printf("%x",s); 38 send(accept_fd,(void*)s,len,0); 39 } 40 close(accept_fd); 41 close(fuwuqi_socket_fd1); 42 return 0; 43 }
编译运行。再另外开一个终端,使用nc -l 12345来检查。
结果如下,证明服务器通信成功!
最新评论