linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室
#include//打開文件
int fd;
//客戶端socket
int client_sock;
//文件路徑
char path[100];
//段口號
char port[100];
//發送線程
void *sendsocket(void *arg)
{
//接受socket
int st = *(int *)arg;
char sendbuffer[100];
char writebuffer[100];
while(1){
//向服務器發送數據
memset(sendbuffer, 0, sizeof(sendbuffer));
//printf("請輸入消息:");
scanf("%s",sendbuffer);
memset(writebuffer, 0, sizeof(writebuffer));
strcat(writebuffer,sendbuffer);
strcat(writebuffer,"\n");
//寫入文件
write(fd,writebuffer,sizeof(writebuffer));
//發送消息
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){
//讀取服務器傳回的數據
memset(receivebuffer, 0, sizeof(receivebuffer));
n = recv(st, receivebuffer, sizeof(receivebuffer), 0);
//用于判斷通信是否結束
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() {
//創建套接字
int sock = socket(AF_INET, SOCK_STREAM, 0);
//向服務器(特定的IP和端口)發起請求
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));//每個字節都用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);
//連接服務器,成功返回0
client_sock = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
if(client_sock == 0) {
printf("服務器連接成功!\n");
}
//新建一個結構體
struct sockaddr_in client_addr;
memset(&client_addr, 0, sizeof(client_addr));
int len = sizeof(client_addr);
//獲得本程序的sockaddr_in結構體
int ti = getsockname(sock, (struct sockaddr*)&client_addr, &len);
//對字符串拼接得到路徑
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("失敗!");
}
//創建發送接受兩個線程 一個接受線程一個發送線程
pthread_t thrd1, thrd2;
pthread_create(&thrd1, NULL, sendsocket, &sock);
pthread_create(&thrd2, NULL, recvsocket, &sock);
pthread_join(thrd1, NULL);
pthread_join(thrd2, NULL);
//關閉文件
close(fd);
//關閉套接字
close(sock);
return 0;
}
總結
以上是生活随笔為你收集整理的linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 扫描仪 程序,Linux桌面
- 下一篇: linux上的ftp怎么设置编码格式,l