[国嵌攻略][093][并发服务器设计]

server.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
 
#define SERVER_PORT 3333
 
void main(){
    //创建标识
    int serverfd;
     
    serverfd = socket(AF_INET, SOCK_STREAM, 0);   //建立TCP连接
     
    //绑定地址
    struct sockaddr_in serverAddr;
     
    serverAddr.sin_family = AF_INET;                   //设置协议
    serverAddr.sin_port = htons(SERVER_PORT);          //设置端口
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);    //设置地址
    bzero(serverAddr.sin_zero, 8);                     //设置为零
     
    bind(serverfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));
     
    //监听端口
    listen(serverfd, 10);
     
    while(1){
        //等待连接
        socklen_t clientAddrLen;
        struct sockaddr_in clientAddr;
        int clientfd;
 
        clientAddrLen = sizeof(struct sockaddr);
        clientfd = accept(serverfd, (struct sockaddr *)&clientAddr, &clientAddrLen);
         
        //创建进程
        int pid;
         
        pid = fork();
        if(pid == 0){
            //接收数据
            char buffer[2048];
             
            recv(clientfd, buffer, sizeof(buffer), 0);
             
            //显示数据
            char *clientIPAddr;
             
            clientIPAddr = (char *)inet_ntoa(clientAddr.sin_addr.s_addr);
            printf("server recvice from %s:\n%s", clientIPAddr, buffer);
             
            //关闭连接
            close(clientfd);
            close(serverfd);
             
            //结束进程
            exit(0);
        }
 
        //关闭连接
        close(clientfd);
    }
     
    //关闭连接
    close(serverfd);
}

 

client.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>
 
#define SERVER_PORT 3333
 
int main(int argc, char **argv){
    //参数检查
    if(argc != 2){
        printf("Usage:\n\t./client <ip address>\n");
        return -1;
    }
     
    //创建标识
    int clientfd;
     
    clientfd = socket(AF_INET, SOCK_STREAM, 0);   //建立TCP连接
     
    //建立连接
    struct sockaddr_in serverAddr;
     
    serverAddr.sin_family = AF_INET;                   //设置协议
    serverAddr.sin_port = htons(SERVER_PORT);          //设置端口
    serverAddr.sin_addr.s_addr = inet_addr(argv[1]);   //设置地址
    bzero(serverAddr.sin_zero, 8);                     //设置为零
     
    connect(clientfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));
 
    //输入数据
    char buffer[2048];
     
    printf("client send to %s:\n", argv[1]);
    fgets(buffer, sizeof(buffer), stdin);
     
    //发送数据
    send(clientfd, buffer, sizeof(buffer), 0);
     
    //关闭连接
    close(clientfd);
     
    return 0;
}

 

posted @   盛夏夜  阅读(276)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示