UNIX Domain Socket實現簡易聊天
UNIX Domain Socket實現簡易聊天
server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <errno.h>
#include <stddef.h>
#include <unistd.h>
#include <pthread.h>
#define MAX_CONNECT_NUM 2
#define BUFFER_SIZE 1024
const char *filename="uds-tmp";
void *Recv(void *p)
{
int newfd = *(int *)p;
char buf[BUFFER_SIZE];
while(1)
{
if(recv(newfd, buf, BUFFER_SIZE, 0) <= 0)
{
close(newfd); break;
}
printf("C: %s\n", buf);
bzero(buf,sizeof(buf));
}
}
int main()
{
int fd,new_fd,len,i;
struct sockaddr_un un;
pthread_t tid;
char buf[BUFFER_SIZE];
fd = socket(AF_UNIX,SOCK_STREAM,0);
if(fd < 0){
printf("Request socket failed!\n");
return -1;
}
un.sun_family = AF_UNIX;
unlink(filename);
strcpy(un.sun_path,filename);
if(bind(fd,(struct sockaddr *)&un,sizeof(un)) <0 ){
printf("bind failed!\n");
return -1;
}
if(listen(fd,MAX_CONNECT_NUM) < 0){
printf("listen failed!\n");
return -1;
}
new_fd = accept(fd,NULL,NULL);
//int ret = recv(new_fd,buffer,BUFFER_SIZE,0);
pthread_create(&tid, NULL,Recv,&new_fd); // 建立執行緒 執行緒接收資料資訊
while(1)
{
scanf("%s",buf);
if( send(new_fd, buf, strlen(buf), 0) < 0)
{
break;
}
bzero(buf,sizeof(buf));
}
close(new_fd);
close(fd);
return 0;
}
client.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<sys/un.h>
#include<errno.h>
#include<stddef.h>
#include<unistd.h>
#define BUFFER_SIZE 1024
const char *filename="uds-tmp";
void *Recv(void *p)
{
int sockfd = *(int *)p;
char buf[BUFFER_SIZE] = {0};
while(1)
{
if(recv(sockfd, buf,20,0)<=0)
{
break;
}
printf("S:%s\n", buf);
bzero(buf,sizeof(buf));
}
}
int main()
{
struct sockaddr_un un;
int sock_fd;
char buf[BUFFER_SIZE] = {0};
pthread_t tid;
un.sun_family = AF_UNIX;
strcpy(un.sun_path,filename);
sock_fd = socket(AF_UNIX,SOCK_STREAM,0);
if(sock_fd < 0){
printf("Request socket failed\n");
return -1;
}
if(connect(sock_fd,(struct sockaddr *)&un,sizeof(un)) < 0){
printf("connect socket failed\n");
return -1;
}
pthread_create(&tid,NULL,Recv,&sock_fd);
while(1)
{
scanf("%s",buf);
send(sock_fd, buf, strlen(buf), 0);
}
return 0;
}
效果截圖
相關文章
- Python基於Socket實現簡易多人聊天室Python
- 網路協議之:socket協議詳解之Unix domain Socket協議AI
- socket實現聊天功能(二)
- WinForm的Socket實現簡單的聊天室 IMORM
- node.js 用socket實現聊天Node.js
- linux一切皆檔案之Unix domain socket描述符(二)LinuxAI
- 基於Socket.IO實現Android聊天功能Android
- node+socket.io 實現一個聊天室
- uniapp專案實踐總結(十五)使用websocket實現簡易聊天室APPWeb
- 用訊息佇列和socket實現聊天系統佇列
- socket.io+express實現聊天室的思考(一)Express
- socket實現簡單ssh服務
- namedtuple簡易實現
- vs2010編寫的簡單socket聊天
- Python使用Socket寫一個簡單聊天程式Python
- Java用UDP實現簡單聊天JavaUDP
- php實現一個簡單的socketPHP
- 簡易版 vue實現Vue
- nodjs+socket.io+webRTC實現聊天室實錄之環境配置JSWeb
- Node TCP /UDP 簡易聊天室TCPUDP
- 利用 trait 簡易 Facade 實現AI
- 簡易實現一個expressExpress
- Go 實現簡易 RPC 框架GoRPC框架
- Java網路程式設計----透過實現簡易聊天工具來聊聊BIOJava程式設計
- PostgreSQL DBA(132) - pgAdmin(unix_socket_directories)SQL
- Laravel + Vue + Swoole 實現的簡單 Web 聊天LaravelVueWeb
- c#實現最簡單的socket通訊C#
- 簡易實現 HTTPS (一) 自動實現 sslHTTP
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- QT實現簡易串列埠助手QT串列埠
- 簡易執行緒池實現執行緒
- 實現一個簡易版WebpackWeb
- NodeJS實現簡易區塊鏈NodeJS區塊鏈
- 實現一個簡易的vueVue
- 學習Promise && 簡易實現PromisePromise
- 模擬實現簡易版shell
- 基於Java的Socket類Tcp網路程式設計實現實時聊天互動程式(一):QQ聊天介面的搭建JavaTCP程式設計
- socket實現簡單傳檔案ftp/scp服務FTP