日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室

發(fā)布時(shí)間:2024/9/27 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#include//打開文件

int fd;

//客戶端socket

int client_sock;

//文件路徑

char path[100];

//段口號(hào)

char port[100];

//發(fā)送線程

void *sendsocket(void *arg)

{

//接受socket

int st = *(int *)arg;

char sendbuffer[100];

char writebuffer[100];

while(1){

//向服務(wù)器發(fā)送數(shù)據(jù)

memset(sendbuffer, 0, sizeof(sendbuffer));

//printf("請(qǐng)輸入消息:");

scanf("%s",sendbuffer);

memset(writebuffer, 0, sizeof(writebuffer));

strcat(writebuffer,sendbuffer);

strcat(writebuffer,"\n");

//寫入文件

write(fd,writebuffer,sizeof(writebuffer));

//發(fā)送消息

send(st, sendbuffer, strlen(sendbuffer), 0);

}

return NULL;

}

//接受線程

void *recvsocket(void *arg)

{

int st = *(int *)arg;

char receivebuffer[100];

char writebuffer[100];

int n;

while(1){

//讀取服務(wù)器傳回的數(shù)據(jù)

memset(receivebuffer, 0, sizeof(receivebuffer));

n = recv(st, receivebuffer, sizeof(receivebuffer), 0);

//用于判斷通信是否結(jié)束

if(n<=0)

break;

memset(writebuffer, 0, sizeof(writebuffer));

strcat(writebuffer,receivebuffer);

strcat(writebuffer,"\n");

//寫入文件

write(fd,writebuffer,sizeof(writebuffer));

//輸出

printf("%s\n", receivebuffer);

}

return NULL;

}

int main() {

//創(chuàng)建套接字

int sock = socket(AF_INET, SOCK_STREAM, 0);

//向服務(wù)器(特定的IP和端口)發(fā)起請(qǐng)求

struct sockaddr_in serv_addr;

memset(&serv_addr, 0, sizeof(serv_addr));//每個(gè)字節(jié)都用0填充

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

serv_addr.sin_port = htons(6666);

//連接服務(wù)器,成功返回0

client_sock = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

if(client_sock == 0) {

printf("服務(wù)器連接成功!\n");

}

//新建一個(gè)結(jié)構(gòu)體

struct sockaddr_in client_addr;

memset(&client_addr, 0, sizeof(client_addr));

int len = sizeof(client_addr);

//獲得本程序的sockaddr_in結(jié)構(gòu)體

int ti = getsockname(sock, (struct sockaddr*)&client_addr, &len);

//對(duì)字符串拼接得到路徑

sprintf(port,"%d",client_addr.sin_port);

strcat(path,"./usernote/");

strcat(path,port);

//打開文件

fd = open(path, O_CREAT|O_EXCL|O_WRONLY|O_APPEND|O_NONBLOCK);

if(fd == -1)

{

printf("失敗!");

}

//創(chuàng)建發(fā)送接受兩個(gè)線程 一個(gè)接受線程一個(gè)發(fā)送線程

pthread_t thrd1, thrd2;

pthread_create(&thrd1, NULL, sendsocket, &sock);

pthread_create(&thrd2, NULL, recvsocket, &sock);

pthread_join(thrd1, NULL);

pthread_join(thrd2, NULL);

//關(guān)閉文件

close(fd);

//關(guān)閉套接字

close(sock);

return 0;

}

總結(jié)

以上是生活随笔為你收集整理的linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。