linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室
#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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 扫描仪 程序,Linux桌面
- 下一篇: 没钱和抠门的区别 状态和心态的区别