socket通信实现

为了实现socket的通信验证,写了一个简单的客服端向服务器端通信的代码
服务器端:
1、版本验证

WORD wVersionRequested=MAKEWORD(2,2);
 WSADATA result;
 int err = WSAStartup(wVersionRequested, &result);
 if (err != 0) {
  printf("启动失败\n");
  WSACleanup();
  return 404;
 }
 if (LOBYTE(result.wVersion) != 2 || HIBYTE(result.wVersion) != 2) {
  printf("版本号获取失败!\n");
  WSACleanup();
  return 404;
 }

2、生成socket

SOCKET ser_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if (INVALID_SOCKET == ser_sock) {
  printf("生成socket失败!\n");
  WSACleanup();
  return 404;
 }

3、套接字绑定

struct sockaddr_in ser_addr;
 memset(&ser_addr, 0, sizeof(ser_addr));
 ser_addr.sin_family = AF_INET;
 ser_addr.sin_addr.s_addr = inet_addr("192.168.1.104");
 ser_addr.sin_port = htons(10000);//端口转为大端字节序
 
 int back=bind(ser_sock,(SOCKADDR*) &ser_addr,sizeof(ser_addr));
 if (SOCKET_ERROR == back) {
  printf("绑定失败!\n");
  WSACleanup();
  return 404;
 }

4、监听连接及接收;接受失败即关闭

 //监听
 int re = listen(ser_sock,10);
 if (SOCKET_ERROR == re) {
  printf("监听失败!\n");
  WSACleanup();
  return 404;
 }
 //接收
 printf("等待连接。。。。\n");
 SOCKET jie = accept(ser_sock, NULL,NULL);
 if (INVALID_SOCKET == jie) {
  printf("连接失败!\n");
  closesocket(ser_sock);
  WSACleanup();
  return 404;
 }
 printf("连接成功!\n");

5、通信

char buff[1024];
 while(1) {
  int r = recv(jie, buff, 1023, NULL);
  if (r > 0) {
   buff[r] = 0;
   printf(">>>>%s\n",buff);
  }
 }

客户端:
几乎流程与上述相同只是不需要绑定、监听,接受步骤,直接改为连接和通信
代码实现:

WORD wVersionRequested = MAKEWORD(2, 2);
 WSADATA result;
 int err = WSAStartup(wVersionRequested, &result);
 if (err != 0) {
  printf("启动失败\n");
  WSACleanup();
  return 404;
 }
 if (LOBYTE(result.wVersion) != 2 || HIBYTE(result.wVersion) != 2) {
  printf("版本号获取失败!\n");
  WSACleanup();
  return 404;
 }
 //生成套接字
 SOCKET cli_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if (INVALID_SOCKET == cli_sock) {
  printf("生成socket失败!\n");
  WSACleanup();
  return 404;
 }
 //设备信息
 struct sockaddr_in ser_addr;
 memset(&ser_addr, 0, sizeof(ser_addr));
 ser_addr.sin_family = AF_INET;
 ser_addr.sin_addr.s_addr = inet_addr("192.168.1.104");
 ser_addr.sin_port = htons(10000);//端口转为大端字节序
//连接
 int co = connect(cli_sock, (SOCKADDR*)&ser_addr, sizeof(ser_addr));
 printf("正在建立连接。。。。。\n");
 if (SOCKET_ERROR == co) {
  printf("连接失败!\n");
  closesocket(cli_sock);
  WSACleanup();
  return 404;
 }
 printf("连接成功!\n");
 //通信
 char buff[1024];
 while (1)  {
  memset(buff, 0, 1024);
  printf("你要发送的内容:\n");
  scanf("%s", buff);
  send(cli_sock,buff,strlen(buff),NULL);
 }

运行结果
运行结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值