TCP多线程服务端-客户端模板(Linux下)

简介: TCP多线程服务端-客户端模板(Linux下)

服务器模板

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <pthread.h>
#include <malloc.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#define PORT 9999   // 端口
void *client_thread(void *arg);
//多线程 并发服务器
int main(int argc, char const *argv[])
{
    int ret;
    int sockfd;  //套接字描述符
    int connfd;
    char buf[1024];
    int fp;
    sockfd = socket(AF_INET, SOCK_STREAM, 0); //创建通信套接字ipv4协议 tcp通信
    if(sockfd==-1){
        printf("socket failed\n");
        exit(-1);
    }
    //定义addr存入本机地址信息
    struct sockaddr_in addr;
    addr.sin_family =  AF_INET   ;  //协议
    addr.sin_port =  htons(PORT) ;  //端口
    addr.sin_addr.s_addr = inet_addr("0") ; //ip  0代表本机
    //绑定地址信息(sockfd + addr)
    ret = bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)); 
    if(ret==-1){
        printf("bind failed\n");
        exit(-1);
    }
    listen(sockfd,255);  //建立监听队列,并监听状态
    while(1){
        printf("wait...\n");
        connfd =  accept(sockfd, NULL, NULL); //建立连接
        printf("connect a client\n");
        // 创建子线程
        pthread_t pid;
        pthread_create(&pid, NULL, client_thread, (void *)&connfd);
        pthread_detach(pid);
    }
    close(sockfd);
    return 0;
}
// 线程函数
void *client_thread(void *arg)
{
    int connfd = *(int *)arg;
    char buf[256];  // 接收缓冲区,大小根据你的需求定
    while(1) {
      // 你的程序逻辑
        // 接收函数: ret = read(connfd, buf, sizeof(buf));   // 返回值为实际接收的字节数,ret <= 0 表示客户端断开连接
        // 发送函数: ret = write(connfd, buf, sizeof(buf));  // 返回值为实际发送的字节数
    }
}

客户端模板

#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <sys/socket.h>
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#define HOST "192.168.1.108"  // 服务器地址
#define PORT 9999  // 服务器端口
//搭建tcp客服端
int main(int argc, char const *argv[])
{
  int ret,ret1,ret2;
  int sockfd; //套接字描述符
  srand(time(NULL));
  sockfd = socket(AF_INET ,SOCK_STREAM, 0); //创建通信套接字(TCP)
  if(sockfd == -1)
  {
    printf("socket failed\n");
    exit(-1);
  }
  //定义addr存入本机地址信息
  struct sockaddr_in addr;
    addr.sin_family = AF_INET; //协议
    addr.sin_port = htons(PORT);    //端口
    addr.sin_addr.s_addr= inet_addr(HOST); //服务器地址
    ret = connect(sockfd, (struct sockaddr *)&addr, sizeof(addr));  //连接tcp客服端
    if(ret == -1)
    {
      printf("connect failed1\n");
      return 0;
    }
    printf("connect success!\n");
    while(1)
    {
      // 你的程序逻辑
        // 接收函数: ret = read(connfd, buf, sizeof(buf));   // 返回值为实际接收的字节数
        // 发送函数: ret = write(connfd, buf, sizeof(buf));  // 返回值为实际发送的字节数
    }
    close(sockfd); //关闭通信套接字(TCP)
}
目录
相关文章
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
38 0
Linux C/C++之TCP / UDP通信
|
1月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
124 1
|
3月前
|
移动开发 监控 网络协议
在Linux中,如何查看 http 的并发请求数与其 TCP 连接状态?
在Linux中,如何查看 http 的并发请求数与其 TCP 连接状态?
|
3月前
|
监控 网络协议 Linux
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
|
3月前
|
存储 监控 网络协议
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
|
3月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
87 1
|
3月前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
56 6
|
3月前
|
缓存 负载均衡 网络协议
Linux的TCP连接数量与百万千万并发应对策略
【8月更文挑战第15天】在Linux系统中,关于TCP连接数量的一个常见误解是认为其最大不能超过65535个。这一数字实际上是TCP端口号的上限,而非TCP连接数的直接限制。实际上,Linux服务器能够处理的TCP连接数远远超过这一数字,关键在于理解TCP连接的标识方式、系统配置优化以及应用架构设计。
492 2
|
3月前
|
网络协议 安全 Linux
在Linux中,tcp三次握⼿的过程及原理?
在Linux中,tcp三次握⼿的过程及原理?
|
3月前
|
域名解析 网络协议 Linux
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
下一篇
无影云桌面