基於TCP和Socket的Linux環境下簡易聊天工具設計
阿新 • • 發佈:2018-12-18
- 主要實現一個Linux下的區域網聊天工具的設計。
- 該設計主要分為兩部分,客戶端部分和伺服器端部分。
執行伺服器端程式可以和任意一個運行了的客戶端程式的進行通訊,通訊內容能夠通過終端顯示出來。兩個部分都使用C語言,利用vim編輯器,通過tcp,套介面程式設計實現相關功能, gcc偵錯程式除錯成功.
####1. 客戶端程式碼:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<unistd.h> #define PORT 6666 int main(int argc,char *argv[]) { int s; struct sockaddr_in server_addr; s=socket(AF_INET,SOCK_STREAM,0); if(s<0) { printf("socket error\n"); return -1; } bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(PORT); server_addr.sin_addr.s_addr=htonl(INADDR_ANY); inet_pton(AF_INET,argv[1],&server_addr.sin_addr); connect(s,(struct sockaddr*)&server_addr,sizeof(struct sockaddr)); process_conn_client(s); close(s); return 0; }
####2. 伺服器程式碼
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<unistd.h> #define PORT 6666 #define BACKLOG 2 int main(int argc,char *argv[]) { int ss,sc; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int err; pid_t pid; ss=socket(AF_INET,SOCK_STREAM,0); if(ss<0) { printf("socket error\n"); return -1; } bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(PORT); server_addr.sin_addr.s_addr=htonl(INADDR_ANY); err=bind(ss,(struct sockaddr*)&server_addr,sizeof(server_addr)); if(err<0) { printf("bind error\n"); return -1; } err=listen(ss,BACKLOG); if(err<0) { printf("listen error\n"); return -1; } for(;;) { socklen_t addrlen=sizeof(struct sockaddr); sc=accept(ss,(struct sockaddr*)&client_addr,&addrlen); if(sc<0) { continue; } pid=fork(); if(pid==0) { process_conn_server(sc); close(ss); } else { close(sc); } } }
#####3.process
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<unistd.h> #define PORT 6666 void process_conn_client(int s) { ssize_t size=0; char buffer[1024]; for(;;) { size=read(0,buffer,1024); if(size>0) { write(s,buffer,size); size=read(s,buffer,1024); write(1,buffer,size); } } } void process_conn_server(int s) { ssize_t size=0; char buffer[1024]; for(;;) { size=read(s,buffer,1024); if(size==0) { return; } printf("%s",buffer); sprintf(buffer,"%d bytes altogether\n",size); write(s,buffer,strlen(buffer)+1); } }
github地址:https://github.com/liyifan687/TCP-Instant-Messenger