socket编程热身程序

Posted 自由石匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket编程热身程序相关的知识,希望对你有一定的参考价值。

 1 /*server.c*/
 2 #include <stdio.h>
 3 #include <arpa/inet.h>
 4 #include <sys/types.h>          /* See NOTES */
 5 #include <sys/socket.h>
 6 #include <netinet/in.h>
 7 #include <stdlib.h>
 8 #include <unistd.h>
 9 #define  err_log(errlog) do{ perror(errlog); exit(1);}while(0)
10 int main(int argc, const char *argv[])
11 {
12     int sockfd;
13     int acceptfd;
14     struct sockaddr_in  serveraddr, clientaddr;
15    
16 if (argc != 3)
17 { 18 fprintf(stderr,"Usage:%s serverip port.\n", argv[0]); 19 return -1; 20 } 21 /*server端 第一步:socket 创建套接字*/ 22 if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 23 { 24 err_log("fail to socket"); 25 } 26 /*server端 第二步: 填充网络信息结构体*/ 27 serveraddr.sin_family = AF_INET; 28 serveraddr.sin_addr.s_addr = inet_addr(argv[1]);//argv[1]:由手动输入,终端的第二个参数 29 serveraddr.sin_port = htons(atoi(argv[2]));//htons 将本地字节序变为网络字节序,atoi将数字类字符串转化为数字,如字符串“80” 变为数字80 30 /*server端 第三步 :bind() 绑定*/ 31 if(bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) 32 { 33 err_log("fail to bind"); 34 } 35 /*server端 第四步:listen() 监听*/ 36 if(listen(sockfd, 15) < 0) 37 { 38 err_log("fail to listen"); 39 } 40 41 socklen_t addrlen = sizeof(struct sockaddr_in);
/*接收客户端的连接请求*/
42 acceptfd = accept(sockfd, (struct sockaddr *)&clientaddr, &addrlen); 43 44 if(acceptfd < 0) 45 { 46 err_log("fail to acceptfd"); 47 } 48 49 printf("%s --> %d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
/*inet_ntoa函数将网络字节序的IP地址转换为十进制的字符串*/
/*ntohs 将网络端口号转换为本地端口号*/
50 close(acceptfd); //关闭文件描述符 51 close(sockfd);//关闭文件描述符

52 return 0;
}

53
 1 /*client*/
 2 #include <stdio.h>
 3 #include <arpa/inet.h>
 4 #include <sys/types.h>          /* See NOTES */
 5 #include <sys/socket.h>
 6 #include <netinet/in.h>
 7 #include <stdlib.h>
 8 #include <unistd.h>
 9 #define  err_log(errlog) do{ perror(errlog); exit(1);}while(0)
10 
11 int main(int argc, const char *argv[])
12 {
13     int sockfd;
14     int acceptfd;
15     struct sockaddr_in  serveraddr, clientaddr;
16 
17     if(argc != 3)
18     {
19         fprintf(stderr,"Usage:%s serverip port.\n", argv[0]);
20         return -1;
21     }
22     /*client端 第一步:socket套接字*/
23     if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
24     {
25         err_log("fail to socket");
26     }
27    /*client端 第二部:填充网络信息结构体*/
28     serveraddr.sin_family = AF_INET;
29     serveraddr.sin_addr.s_addr = inet_addr(argv[1]);
30     serveraddr.sin_port = htons(atoi(argv[2]));
31    /*client端 第三步:连接服务器端*/
32   if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)
33     {
34         err_log("fail to connect");
35     }
36   close(sockfd);//关闭文件描述符
37   return 0;
38 }

 

以上是关于socket编程热身程序的主要内容,如果未能解决你的问题,请参考以下文章

golang代码片段(摘抄)

Python 之 Socket编程(TCP/UDP)

c_cpp 热身动态编程实践

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

个人赛组2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)——热身赛

并发编程热身十个性能小面试题