linux에서udp 기반의 간단한 채팅창
3914 단어 컴퓨터 네트워크
1.udp란 무엇인가?그는 무슨 작용을 합니까?그는 tcp와 어떤 차이가 있습니까?
udp는 사용자 데이터 보고 프로토콜입니다. 그는 데이터 보고를 위한 것입니다. 연결이 없고 신뢰할 수 없습니다.
tcp는 전송 제어 프로토콜입니다. 그는 바이트 흐름을 향하고 연결을 향하여 신뢰성을 확보합니다
2. 채팅창인 만큼 클라이언트(udp_client), 서버(udp_server)가 필요합니다.
그러면 클라이언트와 서버 포트를 어떻게 만듭니까?
vim udp_client.c
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 int main(int argc,char*argv[])// : ./udp_client+ip +
9 {
10 if(argc!=3)
11 {
12 printf("Usage:%s [ip][port]
",argv[0]);
13 return 1;
14 }
15 int sock=socket(AF_INET,SOCK_DGRAM,0);//
16 if(sock<0)
17 {
18 printf("socket error!");
19 return 2;
20 }
21 char buf[128];
22 struct sockaddr_in server;
23 server.sin_family=AF_INET;
24 server.sin_port=htons(atoi(argv[2]));//atoi
25 server.sin_addr.s_addr=inet_addr(argv[1]);
26 socklen_t len=sizeof(server);
27 for(;;)
28 {
29 buf[0]=0;
30 ssize_t s=read(0,buf,sizeof(buf)-1); //0 ,1 ,2
31 if(s>0)
32 {
33 buf[s-1]=0;//
34 sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&server,len);
35 s=recvfrom(sock,buf,sizeof(buf)-1,0,NULL,NULL);
36 if(s>0)
37 {
38 buf[s]=0;
39 printf("server echo# %s
",buf);
40 }
41 }
42 }
43 close(sock);
44 return 0;
45 }
vim udp_server.c
#include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define SIZE 128
9 void service(int sock)
10 {
11 char buf[SIZE];
12 for(;;)
13 {
14 buf[0]=0;
15 struct sockaddr_in peer;
16 socklen_t len=sizeof(peer);
17 ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&peer,&len);//buf ,sockaddr*
18 {
19 if(s>0)
20 {
21 buf[s]=0;
22 printf("[%s : %d]#%s
",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port),buf);
23 sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&peer,len);
24 }
25 }
26 }
27 }
28 int main(int argc,char*argv[])
29 {
30 if(argc!=3)
31 {
32 printf("Usage:%s [ip] [port]
",argv[0]);
33 return 3;
34 }
35 int sock=socket(AF_INET,SOCK_DGRAM,0);
36 if(sock<0)
37 {
38 printf("socket error!");
39 return 1;
40 }
41 struct sockaddr_in local;
42 local.sin_family=AF_INET;
43 local.sin_port=htons(atoi (argv[2]));
44 local.sin_addr.s_addr=inet_addr(argv[1]);
45 if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)// ,local sockaddr
46 {
47 printf("bind error");
48 return 2;
49 }
50 service(sock);
51 close(sock);//
52 }
vim Makefile 컴파일
1 .PHONY:all
2 all:udp_client udp_server
3 udp_client:udp_client.c
4 gcc -o $@ $^
5 udp_server:udp_server.c
6 gcc -o $@ $^
7 .PHONY:clean
8 clean:
9 rm -f udp_client udp_server
서버와 클라이언트의 생성을 완료하면 우리는 같은 IP 주소를 방문하여 통신할 수 있습니다.테스트에 사용하면 로컬 링 주소를 사용하도록 권장합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux 가상 기기 설정 네트워크 환경역할: 가상 컴퓨터가 네트워크를 사용할 수 있도록 하는 것이 중요합니다. 편집할 때 dd는 한 줄을 삭제하고 i는 삽입합니다.: wq 쓰기 종료;ctrl+c ping 종료 네트워크 프로필 편집vi/etc/syscon...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.