TCP通讯程序设计
2015-05-08 08:03
561 查看
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 3333 int main() { int sockfd,newfd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buffer[128]; int nbyte; int sin_size; //创建socket 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(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; }
相关文章推荐
- TCP/IP通信程序设计中的通讯方式与报文格式
- C# Socket Tcp 语音通讯程序设计
- TCP协议通讯工作原理
- TCP服务器端和客户端程序设计
- TCP通讯模型
- 通讯系统经验谈【一】TCP连接状态分析:SYNC_RECV,CLOSE_WAIT,TIME_WAIT
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- 常见通讯方式RS232 RS485 TCP/IP介绍
- Python 实现 socket 通讯 (TCP/UDP)
- TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
- ios实现基于socket tcp/ip的通讯
- tcp/ip学习第一步:网络中两台主机进行通讯,协议栈是如何处理数据报的.
- 加密的TCP通讯全过程
- 套接字通讯实例(TCP)
- socket通讯,TCP,UDP,HTTP的区别
- Socket编程(异步通讯)(Tcp,Udp)
- TCP UDP协议网络通讯
- 基于TCP网络程序设计(客户机/服务器模式的通信)
- C#使用TCP/IP与ModBus进行通讯
- python实现socket通讯(TCP)