Linux UDP簡單聊天室

2021-09-26 10:06:57 字數 3429 閱讀 4833

伺服器端:

#include#include #include #include #include #include #include #include int sockfd = 0;

//建立結構體用來存放客戶端資訊

typedef struct node

node_t;

node_t *link_head()

node_t *h;

//正插法

void link_creat(node_t *head , int client_port,char *name,struct sockaddr_in clientaddr)

//列印

void link_show(node_t *head)

}//刪除

int link_delete(node_t *head,int client_port)

while(head->next != null)

head = head->next;

} return 0;

}//判斷是否為空

int link_empty(node_t *head)

else }

//查詢

char *link_search(node_t *head,int client_port)

} return null;

}//傳送給處除了自己的其他使用者

int cliene_send(node_t *head,struct sockaddr_in clientaddr,char *buf)

} }}//接收執行緒

void *fun_recv(void *a)

; char client_name[128];

socklen_t len = sizeof(clientaddr);

int r = 0;

int client_port;

char *isclient_port = null;

// node_t *h = link_head();

while(1)

else

else

;memset(ss,0,sizeof(ss));

strcat(ss,isclient_port);

strcat(ss,"退出了 ");

cliene_send(h,clientaddr,ss);

link_delete(h,client_port);

link_show(h);

}else

;memset(ss,0,sizeof(ss));

strcat(ss,isclient_port);

strcat(ss,": ");

strcat(ss,buf);

cliene_send(h,clientaddr,ss);

//link_show(h);

printf("%s :%s\n",isclient_port,buf);

// printf("port = %d\n",ntohs(clientaddr.sin_port));}}

} //printf("port = %d\n",ntohs(clientaddr.sin_port));

//printf("addr = %s\n",inet_ntoa(clientaddr.sin_addr)); }}

//傳送執行緒

void *fun_send(void *a)

; while(1)

} }}

int main(int argc, const char *ar**)

//建立套接字

sockfd = socket(af_inet,sock_dgram,0);

if(sockfd == -1)

//設定網路資訊

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(atoi(ar**[1]));

serveraddr.sin_addr.s_addr = inet_addr("192.168.11.218");

//繫結

if(bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))==-1)

pthread_t pthid1,pthid2;

//通訊

if(pthread_create(&pthid1,null,fun_recv,&clientaddr)!=0)

if(pthread_create(&pthid2,null,fun_send,h)!=0)

pthread_join(pthid1,null);

pthread_join(pthid2,null);

close(sockfd);

return 0;

}

客戶端:

#include#include #include #include #include #include #include int sockfd = 0;

struct sockaddr_in serveraddr;

socklen_t len = sizeof(serveraddr);

pthread_t pthid1,pthid2;

//傳送執行緒

void *fun_send(void *a)

; printf("請輸入使用者名稱\n");

while(1)

if(strcmp(buf,"quit")== 0)

}}//接收執行緒

void *fun_recv(void *a)

; while(1)

else

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

} }}int main(int argc, const char *ar**)

//建立套接字

sockfd = socket(af_inet,sock_dgram,0);

if(sockfd == -1)

//設定網路資訊

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(atoi(ar**[1]));

serveraddr.sin_addr.s_addr = inet_addr("192.168.11.218");

//通訊

if(pthread_create(&pthid1,null,fun_send,null)!=0)

if(pthread_create(&pthid2,null,fun_recv,null)!=0)

pthread_join(pthid1,null);

pthread_join(pthid2,null);

close(sockfd);

return 0;

}

簡單聊天室

include include include include include include include include include include pthread t thread 2 void send msg void ip msg if connect sockfd,struct ...

go 簡單聊天室

package main import fmt net strings time 建立使用者結構體型別 type cline struct var onlinemap map string cline 建立全域性 channel 傳遞使用者訊息 var message make chan strin...

PHP Swoole 簡單聊天室

效果圖 傳送 開始聊天 php date default timezone set prc users array 建立websocket伺服器物件,監聽0.0.0.0 9502埠 ws new swoole websocket server 0.0.0.0 9502 ws set array wo...