zoukankan      html  css  js  c++  java
  • 计算机网络 实验之 windows下 C++ 实现 socket 编程展示

    本篇博客只是先展示一下代码,具体的编程相关请看后面的博客吧

    服务器端代码 server.cpp

     1 #include <stdio.h>
     2 #include <winsock2.h>
     3 
     4 #pragma comment(lib,"ws2_32.lib")
     5 
     6 int main(int argc, char* argv[])
     7 {
     8     //初始化WSA
     9     WORD sockVersion = MAKEWORD(2,2);
    10     WSADATA wsaData;
    11     if(WSAStartup(sockVersion, &wsaData)!=0)
    12     {
    13         return 0;
    14     }
    15 
    16     //创建套接字
    17     SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    18     if(slisten == INVALID_SOCKET)
    19     {
    20         printf("socket error !");
    21         return 0;
    22     }
    23 
    24     //绑定IP和端口
    25     sockaddr_in sin;
    26     sin.sin_family = AF_INET;
    27     sin.sin_port = htons(8888);
    28     sin.sin_addr.S_un.S_addr = INADDR_ANY;
    29     if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
    30     {
    31         printf("bind error !");
    32     }
    33 
    34     //开始监听
    35     if(listen(slisten, 5) == SOCKET_ERROR)
    36     {
    37         printf("listen error !");
    38         return 0;
    39     }
    40 
    41     //循环接收数据
    42     SOCKET sClient;
    43     sockaddr_in remoteAddr;
    44     int nAddrlen = sizeof(remoteAddr);
    45     char revData[255];
    46     while (true)
    47     {
    48         printf("等待连接...
    ");
    49         sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
    50         if(sClient == INVALID_SOCKET)
    51         {
    52             printf("accept error !");
    53             continue;
    54         }
    55         printf("接受到一个连接:%s 
    ", inet_ntoa(remoteAddr.sin_addr));
    56 
    57         //接收数据
    58         int ret = recv(sClient, revData, 255, 0);
    59         if(ret > 0)
    60         {
    61             revData[ret] = 0x00;
    62             printf(revData);
    63         }
    64 
    65         //发送数据
    66         const char * sendData = "你好,TCP客户端!
    ";
    67         send(sClient, sendData, strlen(sendData), 0);
    68         closesocket(sClient);
    69     }
    70 
    71     closesocket(slisten);
    72     WSACleanup();
    73     return 0;
    74 }

    客户端代码 client.cpp:

     1 #include<WINSOCK2.H>
     2 #include<STDIO.H>
     3 #include<iostream>
     4 #include<cstring>
     5 using namespace std;
     6 #pragma comment(lib, "ws2_32.lib")
     7 
     8 int main()
     9 {
    10     WORD sockVersion = MAKEWORD(2, 2);
    11     WSADATA data;
    12     if(WSAStartup(sockVersion, &data)!=0)
    13     {
    14         return 0;
    15     }
    16     while(true){
    17         SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    18         if(sclient == INVALID_SOCKET)
    19         {
    20             printf("invalid socket!");
    21             return 0;
    22         }
    23 
    24         sockaddr_in serAddr;
    25         serAddr.sin_family = AF_INET;
    26         serAddr.sin_port = htons(8888);
    27         serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    28         if(connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
    29         {  //连接失败
    30             printf("connect error !");
    31             closesocket(sclient);
    32             return 0;
    33         }
    34 
    35         string data;
    36         cin>>data;
    37         const char * sendData;
    38         sendData = data.c_str();   //string转const char*
    39         //char * sendData = "你好,TCP服务端,我是客户端
    ";
    40         send(sclient, sendData, strlen(sendData), 0);
    41         //send()用来将数据由指定的socket传给对方主机
    42         //int send(int s, const void * msg, int len, unsigned int flags)
    43         //s为已建立好连接的socket,msg指向数据内容,len则为数据长度,参数flags一般设0
    44         //成功则返回实际传送出去的字符数,失败返回-1,错误原因存于error
    45 
    46         char recData[255];
    47         int ret = recv(sclient, recData, 255, 0);
    48         if(ret>0){
    49             recData[ret] = 0x00;
    50             printf(recData);
    51         }
    52         closesocket(sclient);
    53     }
    54 
    55 
    56     WSACleanup();
    57     return 0;
    58 
    59 }

    在Codeblocks中如果不进行一些措施可能报以下错误:

    解决方法:

    右键相关project:

     

    去codeblocks相关文件夹下找到此文件,添加就好了:

     如何同时运行两个程序呢?

    1.找到你所建的项目的文件夹:

     

     

     这就ok啦~~~

  • 相关阅读:
    【设计模式】迭代器模式
    SpringMVC+Hibernate+Junit4+json基本框架近乎0配置
    Python
    Flex中TabNavigator隐藏和显示选项卡
    Android调试工具_ Stetho
    discuz的php7版本号
    分组加密的四种模式(ECB、CBC、CFB、OFB)
    人件札记:保持高效的办公室环境
    UVA 4857 Halloween Costumes 区间背包
    相机标定(Camera calibration)
  • 原文地址:https://www.cnblogs.com/wsy107316/p/14205351.html
Copyright © 2011-2022 走看看