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);}
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
- 1.1 理解网络编程和套接字
- 第一章 理解网络编程和套接字
- 网络编程和套接字
- Linux网络编程和套接字
- Linux网络编程和套接字
- 初识网络编程和套接字
- 网络套接字编程
- 1.1 网络编程与套接字实例
- Linux网络编程 套接字
- 网络编程原始套接字
- 套接字网络编程笔记
- 网络编程原始套接字
- Linux网络编程 套接字
- 网络编程--套接字选项
- 网络编程(套接字)
- 《网络编程》路由套接字
- UNIX网络编程:套接字
- Python 网络套接字编程
- csu1508 地图的四着色(剪枝+BFS DFS)
- 浅谈构造函数与析构函数的调用顺序
- Linux的五个查找命令:find,locate,whereis,which,type
- itextpdf的使用之中文字体
- C#程序中判断DEBUG和RELEASE状态
- 1.1 理解网络编程和套接字
- gcc4.1.2通过rpm包升级gcc4.4.7
- TSP_旅行商问题 - 遗传算法(四)
- 公司ubuntu服务器登录与操作记录
- JAVA反射系列之Method,java.lang.reflect.Method的使用
- poj3009
- 文章标题
- 给襄阳五中17届27班的话
- 1061. Dating (20)PAT甲级