设为首页 收藏本站
查看: 1195|回复: 0

[经验分享] linux下的tcp的server和client编程

[复制链接]

尚未签到

发表于 2018-10-17 09:05:33 | 显示全部楼层 |阅读模式
  /* tcpcli.c */  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #define DEFAULT_PORT 8800
  int main(int argc, char** argv)
  {
  int cPort = DEFAULT_PORT;
  int cClient = 0;
  int cLen = 0;
  struct sockaddr_in cli;
  char cbuf[4096] = {0};
  if(argc < 2)
  {
  printf(&quot;Uasge: client[server IP address]\n&quot;);
  return -1;
  }

  memset(cbuf, 0,>  cli.sin_family = AF_INET;
  cli.sin_port = htons(cPort);
  cli.sin_addr.s_addr = inet_addr(argv[1]);
  cClient = socket(AF_INET, SOCK_STREAM, 0);
  if(cClient < 0)
  {
  printf(&quot;socket() failure!\n&quot;);
  return -1;
  }

  if(connect(cClient, (struct sockaddr*)&cli,>  {
  printf(&quot;connect() failure!\n&quot;);
  return -1;
  }

  cLen = recv(cClient, cbuf,>  if((cLen < 0)||(cLen == 0))
  {
  printf(&quot;recv() failure!\n&quot;);
  return -1;
  }
  printf(&quot;recv() Data From Server: [%s]\n&quot;, cbuf);
  close(cClient);
  return 0;
  }
  编译代码:gcc -o tcp_clt  client_tcp.c
  执行命令:./tcp_clt 192.168.0.230
  TCP scoket服务端程序代码
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  /*********************************************************************
  *filename: tcpserver.c
  *purpose:tcp服务端程序
  ********************************************************************/
  int main(int argc, char ** argv)
  {
  int sockfd,new_fd;     /* 监听socket: sock_fd,数据传输socket: new_fd */
  struct sockaddr_in my_addr; /* 本机地址信息 */
  struct sockaddr_in their_addr; /* 客户地址信息 */
  unsigned int sin_size, myport, lisnum;
  if(argv[1])  myport = atoi(argv[1]);
  else myport = 8800;
  if(argv[2])  lisnum = atoi(argv[2]);
  else lisnum = 2;
  if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
  perror(&quot;socket&quot;);
  exit(1);
  }
  printf(&quot;socket %d ok \n&quot;,myport);
  my_addr.sin_family=PF_INET;
  my_addr.sin_port=htons(myport);
  my_addr.sin_addr.s_addr = INADDR_ANY;
  bzero(&(my_addr.sin_zero), 0);

  if (bind(sockfd, (struct sockaddr *)&my_addr,>  perror(&quot;bind&quot;);
  exit(1);
  }
  printf(&quot;bind ok \n&quot;);
  if (listen(sockfd, lisnum) == -1) {
  perror(&quot;listen&quot;);
  exit(1);
  }
  printf(&quot;listen ok \n&quot;);
  /*
  while(1) {

  sin_size =>  if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
  perror(&quot;accept&quot;);
  continue;
  }
  printf(&quot;server: got connection from %s\n&quot;,inet_ntoa(their_addr.sin_addr));
  if (!fork()) { //子进程代码段
  if (send(new_fd, &quot;Hello, world!\n&quot;, 14, 0) == -1) {
  perror(&quot;send&quot;);
  close(new_fd);
  exit(0);
  }
  }
  close(new_fd); //父进程不再需要该socket
  waitpid(-1,NULL,WNOHANG);//等待子进程结束,清除子进程所占用资源
  }
  */

  sin_size =>  if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
  perror(&quot;accept&quot;);
  exit(0);
  }
  printf(&quot;server: got connection from %s\n&quot;,inet_ntoa(their_addr.sin_addr));
  int   step = 0;
  while(1) {
  char  szSnd[63] = {0};
  sprintf(szSnd,&quot;i am server [%d]\n&quot;,step);
  step++;
  if (send(new_fd, szSnd, strlen(szSnd), 0) == -1) {
  perror(&quot;send&quot;);
  close(new_fd);
  break;
  }
  printf(&quot;send msg: %s \n&quot;,szSnd);
  sleep(1);
  }
  exit(0);
  }
  }
  编译指令:gcc -o tcp_srv tcpserver.c
  执行服务器端程序:./tcp_srv
  创建成功,绑定端口成功,监听成功后,循环发送i am server字符串。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622582-1-1.html 上篇帖子: 快速部署Flash Media Server 下篇帖子: 使用awrrpt.sql 生成AWR报告的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表