博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BSDSocket编程之TCP
阅读量:6430 次
发布时间:2019-06-23

本文共 3367 字,大约阅读时间需要 11 分钟。

TCPClient

1 /*TCP/IP应用编程接口(API)*/  2 /*  3 *客户端的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数  4 *将其与本机地址以及一个本地端口号绑定,请求连接服务器,通过新的socket  5 *向客户端发送字符串" hi,I am client!"。最后关闭该socket。  6 */  7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 15 int main() 16 { 17 int cli_sockfd;/*客户端SOCKET */ 18 int addrlen; 19 char seraddr[14]; 20 struct sockaddr_in ser_addr,/* 服务器的地址*/ 21 cli_addr;/* 客户端的地址*/ 22 char msg[MAX_MSG_SIZE];/* 缓冲区*/ 23 GetServerAddr(seraddr); 24 cli_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET */ 25 if(ser_sockfd<0) 26 { /*创建失败 */ 27 fprintf(stderr,"socker Error:%s\n",strerror(errno)); 28 exit(1); 29 } 30 /* 初始化客户端地址*/ 31 addrlen=sizeof(struct sockaddr_in); 32 bzero(&ser_addr,addrlen); 33 cli_addr.sin_family=AF_INET; 34 cli_addr.sin_addr.s_addr=htonl(INADDR_ANY); 35 cli_addr.sin_port=0; 36 if(bind(cli_sockfd,(struct sockaddr*)&cli_addr,addrlen)<0) 37 { 38 /*棒定失败 */ 39 fprintf(stderr,"Bind Error:%s\n",strerror(errno)); 40 exit(1); 41 } 42 /* 初始化服务器地址*/ 43 addrlen=sizeof(struct sockaddr_in); 44 bzero(&ser_addr,addrlen); 45 ser_addr.sin_family=AF_INET; 46 ser_addr.sin_addr.s_addr=inet_addr(seraddr); 47 ser_addr.sin_port=htons(SERVER_PORT); 48 if(connect(cli_sockfd,(struct sockaddr*)&ser_addr,&addrlen)!=0)/*请求连接*/ 49 { 50 /*连接失败 */ 51 fprintf(stderr,"Connect Error:%s\n",strerror(errno)); 52 close(cli_sockfd); 53 exit(1); 54 } 55 strcpy(msg,"hi,I am client!"); 56 send(sockfd,msg,sizeof(msg),0);/*发送数据*/ 57 recv(sockfd,msg,MAX_MSG_SIZE,0); /* 接受数据*/ 58 printf("%s\n",msg);/*在屏幕上打印出来 */ 59 close(cli_sockfd); 60 61 return 0; 62 }

TCPServer

/*TCP/IP应用编程接口(API)*/ /* *服务器的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及 *一个本地端口号绑定,然后调用listen在相应的socket上*,当accpet接收到一个连接服务请求时, *将生成一个新的socket。服务器显示该客户机的IP地址,并通过新的socket向客户端发送字符串 *" hi,I am SERver!"。最后关闭该socket。 */ #include
#include
#include
#include
#include
#include
#include
int main() { int sock_fd,client_fd; /*sock_fd:*socket;client_fd:数据传输socket */ struct sockaddr_in ser_addr; /* 本机地址信息 */ struct sockaddr_in cli_addr; /* 客户端地址信息 */ char msg[MAX_MSG_SIZE];/* 缓冲区*/ ser_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET */ if(ser_sockfd<0) { /*创建失败 */ fprintf(stderr,"socker Error:%s\n",strerror(errno)); exit(1); } /* 初始化服务器地址*/ addrlen=sizeof(struct sockaddr_in); bzero(&ser_addr,addrlen); ser_addr.sin_family=AF_INET; ser_addr.sin_addr.s_addr=htonl(INADDR_ANY); ser_addr.sin_port=htons(SERVER_PORT); if(bind(ser_sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr_in))<0) { /*绑定失败 */ fprintf(stderr,"Bind Error:%s\n",strerror(errno)); exit(1); } /*侦听客户端请求*/ if(listen(ser_sockfd,BACKLOG)<0) { fprintf(stderr,"Listen Error:%s\n",strerror(errno)); close(ser_sockfd); exit(1); } while(1) { /* 等待接收客户连接请求*/ cli_sockfd=accept(ser_sockfd,(struct sockaddr*) & cli_addr,&addrlen); if(cli_sockfd<=0) { fprintf(stderr,"Accept Error:%s\n",strerror(errno)); } else { /*开始服务*/ recv(cli_addr,msg,MAX_MSG_SIZE,0); /* 接受数据*/ printf("received a connection from %sn", inet_ntoa(cli_addr.sin_addr)); printf("%s\n",msg);/*在屏幕上打印出来 */ strcpy(msg,"hi,I am server!"); send(cli_addr,msg,sizeof(msg),0); /*发送的数据*/ close(cli_addr); } } close(ser_sockfd); }

转载地址:http://cenga.baihongyu.com/

你可能感兴趣的文章
【转】Install SmartGit via PPA in Ubuntu 13.10/13.04/12.04/Linux Mint
查看>>
PNG怎么转换成32位的BMP保持透明
查看>>
经验分享:CSS浮动(float,clear)通俗讲解
查看>>
WTL中最简单的实现窗口拖动的方法(转)
查看>>
数据结构—队列
查看>>
C. Adidas vs Adivon
查看>>
BZOJ4241 : 历史研究
查看>>
(LeetCode)两个队列来实现一个栈
查看>>
[WebGL入门]十九,遮挡剔除和深度測试
查看>>
jquery封装常用方法
查看>>
什么是ICE (Internet Communications Engine)
查看>>
移动web开发之屏幕三要素
查看>>
求按小时统计的语句,该怎么处理
查看>>
TRUNCATE,DORP,DELETE
查看>>
Chrome的开发必备小技巧
查看>>
can-i-win(好)
查看>>
Centos6.5下安装protobuf及简单使用
查看>>
[SharePoint] SharePoint 错误集 3
查看>>
高压光耦
查看>>
[转]DPM2012系列之六:在Win7上安装DPM远程管理控制台
查看>>