1.1 理解网络编程和套接字

来源:互联网 发布:淘宝网的特点有哪些 编辑:程序博客网 时间:2024/06/09 14:54

最近在看网络编程相关的知识,网上说尹圣雨的《TCPIP网络编程》不错,遂网上找了分电子版本的书籍,记录下阅读笔记。


TCP套接字通信可以类比电话机,接听方流程如下:

socket  —— 安装电话机

bind —— 分配电话号码

listen —— 连接电话线

accept —— 拿起话筒

打电话端比较简单,只需要:

socket

connect


举例:服务器端收到连接请求后向请求者返回“Hello World!”

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>void error_handling(char *message);int main(int argc, char *argv[]){int serv_sock;int clnt_sock;struct sockaddr_in serv_addr;struct sockaddr_in clnt_addr;socklen_t clnt_addr_size;char message[]="hello world!";if(argc != 2){printf("Usage : %s <port>\n",argv[0]);exit(1);}serv_sock = socket(PF_INET,SOCK_STREAM,0);if(serv_sock == -1){error_handling("socket() error");}memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);serv_addr.sin_port=htons(atoi(argv[1]));if(bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1){error_handling("bind() error");}if(listen(serv_sock,5) == -1){error_handling("listen() error");}clnt_addr_size = sizeof(clnt_addr);clnt_sock = accept(serv_sock,(struct sockaddr *)&clnt_addr,&clnt_addr_size);if(clnt_sock == -1){error_handling("accept() error");}write(clnt_sock,message,sizeof(message));close(clnt_sock);close(serv_sock);return 0;}void error_handling(char *message){fputs(message,stderr);fputs("\n",stderr);exit(1);}


对应的client端如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>void error_handling(char *message);int main(int argc,char *argv[]){int sock;struct sockaddr_in serv_addr;char message[30];int str_len;if(argc != 3){printf("Usage : %s <IP> <port>\n",argv[0]);exit(1);}sock = socket(PF_INET,SOCK_STREAM,0);if(sock == -1){error_handling("socket() error");}memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr(argv[1]);serv_addr.sin_port = htons(atoi(argv[2]));if(connect(sock,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) == -1){error_handling("connect() error\r\n");}str_len = read(sock,message,sizeof(message)-1);if(str_len == -1){error_handling("read() error");}printf("Message from server : %s \n",message);close(sock);return 0;}void error_handling(char *message){fputs(message,stderr);fputs("\n",stderr);exit(1);}



Client 运行结果如下:
alex@alex-VirtualBox:~/Share/Test/tcpip$ ./hello_client 127.0.0.1 9190Message from server : hello world!alex@alex-VirtualBox:~/Share/Test/tcpip$

Server运行结果如下:

alex@alex-VirtualBox:~/Share/Test/tcpip$ ./hello_server 9190alex@alex-VirtualBox:~/Share/Test/tcpip$




0 0
原创粉丝点击