#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)); // 返回值为实际发送的字节数
}
}