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
原创粉丝点击