如何在TCP/IP上创建多线程系统?

发布于 2025-02-03 13:26:17 字数 2460 浏览 3 评论 0原文

我有这个客户端服务器系统,我需要进行多线程。是TCP/IP,我现在不现在如何启动线程,因此我可以让许多客户端在服务器上发送味精。请帮我。

我也可以ACCPET和一个没有IP的简单客户端服务器系统。对于EUN,代码是GO

gcc server.c -o server 
./server 1234
gcc client.c -o client 
./client 127.0.0.1 1234

服务器代码:

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
//#include "header.h"
#define SIZE 1024

int main(int argc, char *argv [])
{
    int psock, sock,cli_addr_len,table[10][10],i,j,a1,a2,a3,a4,a5,res1,res2;;
    char msg[SIZE];
    struct sockaddr_in addr,cli_addr; // Internet socket
    char reply[SIZE];
    
    memset(&cli_addr, 0, sizeof(cli_addr));
    cli_addr_len = sizeof(cli_addr);

    addr.sin_family = AF_INET; // Internet socket
    addr.sin_addr.s_addr = htonl(INADDR_ANY); // All interfaces
    addr.sin_port = htons(atoi(argv [1]) ) ;
    psock = socket(AF_INET, SOCK_STREAM, 0); // Stream socket
    bind(psock, ( struct sockaddr *)&addr, sizeof(addr));
    listen (psock, 1) ;

    strcpy(msg,"") ;
    printf("\nwaiting for new connection (port : %s) ...\n", argv [1]) ;
    sock = accept(psock, (struct sockaddr *)&cli_addr, &cli_addr_len);
    printf("connection established...\n");


    recv(sock, msg, SIZE, 0) ;
    printf("the msg is : %s ",msg);  
     
     close(sock);
     close(psock);
     unlink(argv [1]);
      return 0;
}

客户端代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "header.h"

#define SIZE 1024

int main(int argc, char *argv [])
{
    int sock, i=1 ;
    char msg[SIZE],reply[SIZE];
    struct sockaddr_in addr; // Internet socket

    addr.sin_family = AF_INET; // Internet socket
    inet_aton(argv [1], &addr.sin_addr);
    addr.sin_port = htons(atoi(argv[2]) ) ;
    sock = socket(AF_INET, SOCK_STREAM, 0); // Stream socket
    connect(sock, ( struct sockaddr *)&addr, sizeof(addr));
    
    strcpy(msg,"") ;
    strcpy(reply,"") ;
 
     fgets(msg,sizeof(msg),stdin);
        send(sock, msg, strlen(msg) + 1, 0);

      close(sock);
    return 0;   
     
     }

I have this system of client-server and I need to multithread. The are TCP/ip ,and I dont now how to start the threads, so I can have many clients to send a msg on server. Please help me.

I can accpet also and a simple client server system with no ip. For to eun the code is go

gcc server.c -o server 
./server 1234
gcc client.c -o client 
./client 127.0.0.1 1234

Server code:

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
//#include "header.h"
#define SIZE 1024

int main(int argc, char *argv [])
{
    int psock, sock,cli_addr_len,table[10][10],i,j,a1,a2,a3,a4,a5,res1,res2;;
    char msg[SIZE];
    struct sockaddr_in addr,cli_addr; // Internet socket
    char reply[SIZE];
    
    memset(&cli_addr, 0, sizeof(cli_addr));
    cli_addr_len = sizeof(cli_addr);

    addr.sin_family = AF_INET; // Internet socket
    addr.sin_addr.s_addr = htonl(INADDR_ANY); // All interfaces
    addr.sin_port = htons(atoi(argv [1]) ) ;
    psock = socket(AF_INET, SOCK_STREAM, 0); // Stream socket
    bind(psock, ( struct sockaddr *)&addr, sizeof(addr));
    listen (psock, 1) ;

    strcpy(msg,"") ;
    printf("\nwaiting for new connection (port : %s) ...\n", argv [1]) ;
    sock = accept(psock, (struct sockaddr *)&cli_addr, &cli_addr_len);
    printf("connection established...\n");


    recv(sock, msg, SIZE, 0) ;
    printf("the msg is : %s ",msg);  
     
     close(sock);
     close(psock);
     unlink(argv [1]);
      return 0;
}

Client code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "header.h"

#define SIZE 1024

int main(int argc, char *argv [])
{
    int sock, i=1 ;
    char msg[SIZE],reply[SIZE];
    struct sockaddr_in addr; // Internet socket

    addr.sin_family = AF_INET; // Internet socket
    inet_aton(argv [1], &addr.sin_addr);
    addr.sin_port = htons(atoi(argv[2]) ) ;
    sock = socket(AF_INET, SOCK_STREAM, 0); // Stream socket
    connect(sock, ( struct sockaddr *)&addr, sizeof(addr));
    
    strcpy(msg,"") ;
    strcpy(reply,"") ;
 
     fgets(msg,sizeof(msg),stdin);
        send(sock, msg, strlen(msg) + 1, 0);

      close(sock);
    return 0;   
     
     }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文