TCP多线程服务端-客户端模板(Linux下)
程序员文章站
2022-06-06 14:10:13
...
服务器模板
#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>
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(9999) ; //端口
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>
void recv_picture01(int sockfd);
void recv_picture02(int sockfd);
//搭建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(9999); //端口
addr.sin_addr.s_addr= inet_addr("192.168.233.128"); //服务器地址
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)
}
推荐阅读
-
C语言学习之Linux下TCP服务器与客户端的实现
-
远程控制服务(SSH)之Linux环境下客户端与服务端的远程连接
-
linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
-
Windows环境下TCP通信的服务端和客户端
-
TCP多线程服务端-客户端模板(Linux下)
-
【杂项01】TCP结构体通信,win服务端接收,Linux客户端发送
-
C语言学习之Linux下TCP服务器与客户端的实现
-
远程控制服务(SSH)之Linux环境下客户端与服务端的远程连接
-
linux下用多线程实现socket服务器和客户端的异步通信
-
linux & windows tcp客户端和服务端,发送和接收文件(公网测试通过)