socket网络编程——TCP servers & TCP client

**

servers

**

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<sys/socket.h>  //网络编程接口
#include<sys/types.h>
#include<arpa/inet.h>  //IP地址转换
#include<netinet/in.h>  //主机/网络字节转换

int main()
{
  int sockfd=socket(AF_INET,SOCK_STREAM,0)//使用TCP/IPV4
  assert(sockfd!=-1)//失败返回-1
  struct sockaddr_in  ser_addr;//IPV4地址结构
  ser_addr.sin_family = AF_INET;//地址族
  ser_addr.sin_port = htons(6000);//端口号(主机字节序->网络字节序)?
  ser_addr.sin_addr.s_addr = inet_addr("127.0.0.1");//服务器地址(本地回环)
  int res = bind(sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr));//将sockfd与一个socket地址绑定
  assert(res!=-1);//失败返回-1
  res=listen(sockfd,5);//创建监听队列,存储待处理的客户连接
  assert(res!=-1);
  while(1)//循环获取客户端的连接
  {
     struct sockaddr_in cli_addr;
     socklen_t len=sizeof(cli_addr);//?
     int c = accept(sockfd,(struct sockaddr*)&cli_addr,&len);从监听队列中接收一个连接
     if(c==-1)
     {
         printf("accept error");
         continue;
     }
     while(1)//循环与获取的客户端连接完成交互
     {
         char buff[128]={0};
         int n=recv(c,buff,127,0);//读取sock上的数据,无数据,则会阻塞
         if(n<=0)
         {
             break;
         }
         printf("%d:%s\n",c,buff);
         n=send(c,"OK",2,0);//往sock上写入数据
         if(n<=0)
         {
             break;
         }
         close(c);//关闭客户端连接
     }
     close(sockfd);//关闭服务器
  }
  exit(0);
}

**

client

**

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<sys/socket.h>  //网络编程接口
#include<sys/types.h>
#include<arpa/inet.h>  //IP地址转换
#include<netinet/in.h>  //主机/网络字节转换

int main()
{
  int sockfd = socket(AF_INET,SOCK_STREAM,0);
  assert(sockfd!=-1);
  struct sockaddr_in ser_addr;
  ser_addr.sin_family=AF_INET;
  ser_addr.sin_port=htons(6000);
  ser_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
  int res=connect(sockfd,(struct sockaddr*)&ser_addr,sieof(ser_addr));
  assert(res!=-1);
  while(1)
  {
      printf("Please input:");
      char buff[128]={0};
      fgets(buff,127,stdin);
      if(strncmp(buff,"end",3)==0)
      {
           break;
      }
      int n=send(sockfd,buff,strlen(buff)-1,0);
      if(n<=0)
      {
         break;
      }
      memset(buff,0,128);
      n=recv(sockfd,buff,127,0);
      if(n<=0)
      {
          break;
      }
      printf("recv data:%s\n",buff);
  }
  close(sockfd);
  exit(0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值