苍天有泪 发表于 2018-10-17 09:05:33

linux下的tcp的server和client编程

  /* 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 = {0};
  if(argc < 2)
  {
  printf(&quot;Uasge: client\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);
  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_cltclient_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)myport = atoi(argv);
  else myport = 8800;
  if(argv)lisnum = atoi(argv);
  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) {
  charszSnd = {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]
查看完整版本: linux下的tcp的server和client编程