zoukankan      html  css  js  c++  java
  • 基于Windows的服务器和客户端

    server.c

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <winsock2.h>
     4 void ErrorHandling(char* message);
     5 
     6 int main(int argc, char* argv[])
     7 {
     8     WSADATA wsaData;
     9     SOCKET hServSock, hClntSock;
    10     SOCKADDR_IN servAddr, clntAddr;
    11 
    12     int szClntAddr;
    13     char message[] = "Hello World!";
    14     if (argc != 2)
    15     {
    16         printf("Usage : %s ,port>
    ", argv[0]);
    17         exit(1);
    18     }
    19 
    20     if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    21         ErrorHandling("WSAStartup() error!");
    22 
    23     hServSock = socket(PF_INET, SOCK_STREAM, 0);
    24     if (hServSock == INVALID_SOCKET)
    25         ErrorHandling("socket() error");
    26 
    27     memset(&servAddr, 0, sizeof(servAddr));
    28     servAddr.sin_family = AF_INET;
    29     servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    30     servAddr.sin_port = htons(atoi(argv[1]));
    31 
    32     if (bind(hServSock, (SOCKADDR *)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
    33         ErrorHandling("bind() error");
    34 
    35     if (listen(hServSock, 5) == SOCKET_ERROR)
    36         ErrorHandling("listen() error");
    37 
    38     szClntAddr = sizeof(clntAddr);
    39     hClntSock = accept(hServSock, (SOCKADDR *)&clntAddr, &szClntAddr);
    40     if (hClntSock == INVALID_SOCKET)
    41         ErrorHandling("accept() error");
    42 
    43     send(hClntSock, message, sizeof(message), 0);
    44     closesocket(hClntSock);
    45     closesocket(hClntSock);
    46     WSACleanup();
    47     return 0;
    48 }
    49 
    50 void ErrorHandling(char* message)
    51 {
    52     fputs(message, stderr);
    53     fputc('
    ', stderr);
    54     exit(1);
    55 }

    client.c

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <WinSock2.h>
     4 void ErrorHandling(char* message);
     5 
     6 int main(int argc, char* argv[])
     7 {
     8     WSADATA wsaData;
     9     SOCKET hSocket;
    10     SOCKADDR_IN servAddr;
    11 
    12     char message[30];
    13     int strLen;
    14     if (argc != 3)
    15     {
    16         printf("Usage : %s <IP> <port>
    ", argv[0]);
    17         exit(1);
    18     }
    19 
    20     if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    21         ErrorHandling("WSAStartup() error!");
    22 
    23     hSocket = socket(PF_INET, SOCK_STREAM, 0);
    24     if (hSocket == INVALID_SOCKET)
    25         ErrorHandling("socket() error");
    26 
    27     memset(&servAddr, 0, sizeof(servAddr));
    28     servAddr.sin_family = AF_INET;
    29     servAddr.sin_addr.s_addr = inet_addr(argv[1]);
    30     servAddr.sin_port = htons(atoi(argv[2]));
    31 
    32     if (connect(hSocket, (SOCKADDR *)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
    33         ErrorHandling("connect() error!");
    34 
    35     strLen = recv(hSocket, message, sizeof(message) - 1, 0);
    36     if (strLen == -1)
    37         ErrorHandling("read() error!");
    38     printf("Message from server: %s 
    ", message);
    39 
    40     closesocket(hSocket);
    41     WSACleanup();
    42     return 0;
    43 }
    44 
    45 void ErrorHandling(char* message)
    46 {
    47     fputs(message, stderr);
    48     fputc('
    ', stderr);
    49     exit(1);
    50 }

    注意,需要在工程属性中设置:链接器-输入-附加依赖项中添加:ws2_32.lib。

  • 相关阅读:
    Mysql安装
    mysql 密码过期
    svn 合并分支
    idea 分支主干管理
    linux删除数据恢复,extundelete
    linux 转换文件编码
    sina 接口 根据ip获取各个国家和地区
    SQL中char、varchar、nvarchar的区别
    C#中virtual和abstract区别,举例子
    父类和子类的关系、代码例子
  • 原文地址:https://www.cnblogs.com/wisdomroc/p/11723071.html
Copyright © 2011-2022 走看看