zoukankan      html  css  js  c++  java
  • 97.TCP通信

    运行截图:

    客户端

    • 创建通信套接字
    1 //通信套接字,用于创建TCP连接
    2     SOCKET socket_send;
    • 创建tcp通信
      1 //创建tcp通信
      2     socket_send = socket(AF_INET, SOCK_STREAM, 0);
    • 创建服务器端结构体保存ip地址以及端口号,用于连接服务器
      1 //创建服务器端结构体保存ip地址以及端口号
      2     SOCKADDR_IN sever_addr;
    • 设置通信模式
      1 //设置通信模式
      2     sever_addr.sin_family = AF_INET;
      3     sever_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
      4     //端口
      5     sever_addr.sin_port = htons(9982);
    • 通过套接字连接服务器
      1     //通过套接字连接到服务器
      2     connect(socket_send, (SOCKADDR*)&sever_addr, sizeof(SOCKADDR));

      连接到服务器后就可以对服务器进行发送或者接受数据

    • 通过套接字发送信息
      1 sendlength = send(socket_send, sendbuf, 256, 0);
    • 通过套接字接收信息
      1 receivelength = recv(socket_send, receivebuf, 256, 0);
    • 关闭网络
      1 //关闭网络
      2     closesocket(socket_send);
      3     WSACleanup();//关闭

    客户端完整代码

     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 //网络通信
     6 #include<winsock.h>
     7 #pragma  comment(lib,"ws2_32.lib")
     8 
     9 void main()
    10 {
    11     //发送的消息
    12     char sendbuf[256] = { 0 };
    13     //收到的消息
    14     char receivebuf[256] = { 0 };
    15     //发送的长度
    16     int sendlength = 0;
    17     //接收的长度
    18     int receivelength = 0;
    19     
    20     //通信套接字,用于创建TCP连接
    21     SOCKET socket_send;
    22     //创建服务器端结构体保存ip地址以及端口号
    23     SOCKADDR_IN sever_addr;
    24 
    25     //版本,2,2版本
    26     WORD wversion = MAKEWORD(2, 2);
    27     //版本
    28     WSADATA wsadata;
    29     //获取版本对比,开始通信
    30     int error = WSAStartup(wversion, &wsadata);
    31     if (error != 0)
    32     {
    33         printf("error");
    34         return;
    35     }
    36     //取出低八位,高八位,对比版本
    37     if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
    38     {
    39         printf(" version  error");
    40         return;
    41     }
    42     //设置通信模式
    43     sever_addr.sin_family = AF_INET;
    44     sever_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
    45     //端口
    46     sever_addr.sin_port = htons(9982);
    47 
    48     //创建tcp通信
    49     socket_send = socket(AF_INET, SOCK_STREAM, 0);
    50 
    51     //通过套接字连接到服务器
    52     connect(socket_send, (SOCKADDR*)&sever_addr, sizeof(SOCKADDR));
    53 
    54     while (1)
    55     {
    56         printf("客户端要说什么:");
    57         scanf("%s", sendbuf);
    58         //通过套接字发送到服务器
    59         sendlength = send(socket_send, sendbuf, 256, 0);
    60         memset(receivebuf, 0, 256);//清零
    61 
    62         //通过套接字接收
    63         receivelength = recv(socket_send, receivebuf, 256, 0);
    64         printf("服务器说:%s
    ", receivebuf);
    65         memset(sendbuf, 0, 256);//清零
    66 
    67     }
    68     //关闭网络
    69     closesocket(socket_send);
    70     WSACleanup();//关闭
    71 }

    服务器端

    • 创建服务器套接字
      1 //服务器套接字
      2     SOCKET socket_server;
    • 创建tcp通信
      1 //创建服务器套接字,接受消息  SOCK_STREAM流
      2     socket_server = socket(AF_INET, SOCK_STREAM, 0);//创建
    • 创建服务器端结构体保存ip地址以及端口号
      1 //服务器结构体信息
      2     SOCKADDR_IN sever_addr;
    • 设置服务器结构体信息
      1 //设置服务器结构体信息
      2     sever_addr.sin_family = AF_INET;//通信
      3     sever_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//获取本地址
      4     sever_addr.sin_port = htons(9982);//端口
    • 把服务器结构体和服务器套接字绑定
      1 //把套接字与服务器结构体绑定 (绑定的是地址,端口)
      2     bind(socket_server, (SOCKADDR*)&sever_addr, sizeof(SOCKADDR));
    • 服务器套接字监听
      1 //服务器套接字监听
      2     listen(socket_server, 5);//最大等待数目为5
    • 获取SOCKADDR结构体大小用于接受连接
      1 length = sizeof(SOCKADDR);
    • 通过服务器套接字接受连接并初始化套接字sorket_receive,把连接者的信息存放在结构体client_addr中
      1 //客户端结构体信息
      2     SOCKADDR_IN client_addr;
    • 1 sorket_receive = accept(socket_server, (SOCKADDR*)&client_addr, &length);
    • 通过套接字sorket_receive向客户端接受或发送消息
       1 //接收数据
       2         receivelength = recv(sorket_receive, receivebuf, 256, 0);
       3         printf("客户端说:%s
      ", receivebuf);
       4         memset(receivebuf, 0, 256);//清零
       5 
       6 
       7         //返回发送数据
       8         printf("服务器要说什么:");
       9         //接收信息
      10         scanf("%s", sendbuf);
      11         //通过连接传递消息到连接
      12         sendlength = send(sorket_receive, sendbuf, 256, 0);
      13         memset(sendbuf, 0, 256);//清零
    • 释放网络
      1 //释放网络
      2     closesocket(sorket_receive);//关闭网络
      3     closesocket(socket_server);
      4     WSACleanup();//关闭

    服务器端完整代码

     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 //网络通信
     6 #include<winsock.h>
     7 #pragma  comment(lib,"ws2_32.lib")
     8 
     9 void main()
    10 {
    11     //发送的消息
    12     char sendbuf[256] = { 0 };
    13     //收到的消息
    14     char receivebuf[256] = { 0 };
    15     //发送的长度
    16     int sendlength = 0;
    17     //收到的长度
    18     int receivelength = 0;
    19     // SOCKADDR结构体长度
    20     int length;
    21 
    22     //服务器套接字
    23     SOCKET socket_server;
    24     //连接的套接字
    25     SOCKET sorket_receive;
    26 
    27     //服务器结构体信息
    28     SOCKADDR_IN sever_addr;
    29     //客户端结构体信息
    30     SOCKADDR_IN client_addr;
    31 
    32     //版本,2,2版本
    33     WORD wversion = MAKEWORD(2, 2);
    34     //当前版本
    35     WSADATA wsadata;
    36     //获取版本对比,开始通信
    37     int error = WSAStartup(wversion, &wsadata);
    38     if (error != 0)
    39     {
    40         printf("error");
    41         return;
    42     }
    43     //取出低八位,高八位,对比版本
    44     if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
    45     {
    46         printf(" version  error");
    47         return;
    48     }
    49 
    50     //设置服务器结构体信息
    51     sever_addr.sin_family = AF_INET;//通信
    52     sever_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//获取本地址
    53     sever_addr.sin_port = htons(9982);//端口
    54 
    55     //创建服务器套接字,接受消息  SOCK_STREAM流
    56     socket_server = socket(AF_INET, SOCK_STREAM, 0);//创建
    57     //把套接字与服务器结构体绑定 (绑定的是地址,端口)
    58     bind(socket_server, (SOCKADDR*)&sever_addr, sizeof(SOCKADDR));
    59     //服务器套接字监听
    60     listen(socket_server, 5);//最大等待数目为5
    61     length = sizeof(SOCKADDR);
    62     //通过服务器套接字接受连接,初始化套接字sorket_receive,把连接者的信息存放在结构体client_addr中
    63     sorket_receive = accept(socket_server, (SOCKADDR*)&client_addr, &length);
    64 
    65     while (1)
    66     {
    67         //接收数据
    68         receivelength = recv(sorket_receive, receivebuf, 256, 0);
    69         printf("客户端说:%s
    ", receivebuf);
    70         memset(receivebuf, 0, 256);//清零
    71 
    72 
    73         //返回发送数据
    74         printf("服务器要说什么:");
    75         //接收信息
    76         scanf("%s", sendbuf);
    77         //通过连接传递消息到连接
    78         sendlength = send(sorket_receive, sendbuf, 256, 0);
    79         memset(sendbuf, 0, 256);//清零
    80     }
    81 
    82     //释放网络
    83     closesocket(sorket_receive);//关闭网络
    84     closesocket(socket_server);
    85     WSACleanup();//关闭
    86     system("pause");
    87 }
  • 相关阅读:
    Python开源框架、库、软件和资源大集合
    java常用的框架介绍
    2016年7款最佳 Java 框架
    10款免费开源PHP框架
    10个提升MySQL性能的小技巧
    15个最受欢迎的Python开源框架
    Facebook's React vs AngularJS: A Closer Look
    用c#监控网络状态
    15种主要编程语言介绍及应用场合
    物联网常见通信协议梳理
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8468466.html
Copyright © 2011-2022 走看看