TCP通讯程序设计
来源:互联网 发布:成都直销软件开发 编辑:程序博客网 时间:2024/05/29 04:21
1.编程模型
2.函数学习
创建套接字 socket
绑定地址 bind
地址类型
struct sockaddr { sa_family_t sa_family; char sa_data[14];}struct sockaddr_in { short int sin_family; short int sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero[8];}struct in_addr { unsigned long s_addr;}地址转换
• in_addr_t inet_addr(const char *cp) 功能:将字符串形式的IP地址转化为整数型的IP地址(网络字节序) 范例: in_addr.saddr = inet_addr(“192.168.1.1” );• char *inet_ntoa (struct in_addr) 功能:将整数形式的IP地址转化为字符串形式的IP地址网络字节序
uint32_t htonl(uint32_t hostlong); 将32位的数据从主机字节序转换为网络字节序 in_addr.saddr = htonl(INADDR_ANY)uint16_t htons(uint16_t hostshort); 将16位的数据从主机字节序转换为网络字节序uint32_t ntohl(uint32_t netlong); 将32位的数据从网络字节序转换为主机字节序uint16_t ntohs(uint16_t netshort); 将16位的数据从网络字节序转换为主机字节序
设置监听端口 listen
等待连接 accept
发送数据 send
接收数据 recv
关闭连接 close
连接服务器 connect
3.综合实例
/* tcp_server.c */#include <stdio.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#define portnum 3333int main(){int sockfd,newfd;struct sockaddr_in server_addr;struct sockaddr_in client_addr;char buffer[128];int nbyte;int sin_size;//创建socketif((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){printf("create socket error\n");exit(1);}//设置要绑定的地址bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(portnum);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//绑定地址bind(sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));//监听端口listen(sockfd,5);while(1){//等待连接sin_size = sizeof(struct sockaddr);newfd = accept(sockfd,(struct sockaddr*)&client_addr,&sin_size);printf("server get connection from %s\n",inet_ntoa(client_addr.sin_addr));//接收数据nbyte = recv(newfd,buffer,128,0);buffer[nbyte] = '\0';printf("server received :%s",buffer);//结束连接close(newfd);}close(sockfd);return 0;}
/* tcp_client.c */#include <stdio.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>int main(){int sockfd;char buffer[128];struct sockaddr_in server_addr;//创建套接字if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){printf("create socket error\n");exit(1);}//设置要绑定的地址bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(3333);server_addr.sin_addr.s_addr = inet_addr("192.168.1.2");//连接服务器connect(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr));//发送数据到服务器printf("please input char :\n");fgets(buffer,128,stdin);send(sockfd,buffer,strlen(buffer),0);//关闭连接close(sockfd);return 0;}
0 0
- TCP通讯程序设计
- TCP通讯程序设计
- C# Socket Tcp 语音通讯程序设计
- TCP/IP通信程序设计中的通讯方式与报文格式
- TCP通讯
- TCP通讯
- TCP通讯
- TCP通讯
- tcp通讯
- TCP程序设计
- TCP程序设计
- TCP 程序设计
- Tcp程序设计
- TCP程序设计
- TCP程序设计
- TCP程序设计
- 关于服务器端通讯程序设计
- UDP通讯程序设计
- POJ 1251 / HDOJ 1301 Jungle Roads
- 二叉查找树
- hadoop1.2.1伪分布模式配置
- 谈谈WebService开发-应用篇(二)-基于CXF-天气预报
- C# TextBox控件只能输入数字
- TCP通讯程序设计
- 多媒体基础知识
- Hadoop1.2.1伪分布模式安装教程
- 应用quartus11.0及modelsim实现的PWM波形仿真(一)
- SODBASE CEP学习(八):高可用性HA
- openwrt编译+openvswitch功能添加
- Beginners Level Course:MAN Pages & Useful Information
- facl讲解
- Java进阶(五)Junit测试