본문 바로가기

여러가지

udp 소켓과 tcp 소켓은 통신할 수 있나

tcp 방식의 클라이언트 소스.

1
2
3
4
5
6
from socket import *
 
s=socket(AF_INET,SOCK_STREAM)
s.connect(("localhost",8080))
s.send("test")
 
cs




그리고 udp 방식의 서버 소스 이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
 
 
int main(int argc,char *argv[]){
    int sockfd,n;
    struct sockaddr_in serveraddr,clientaddr;
    socklen_t len;
    char msg[1000];
 
    sockfd=socket(AF_INET,SOCK_DGRAM,0);
    
    //bzero(&serveraddr,sizeof(serveraddr));
    memset(&serveraddr,0x00,sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serveraddr.sin_port=htons(8080);
    
    bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
 
    while(1){
        len = sizeof(clientaddr);
        n = recvfrom(sockfd,msg,1000,0,(struct sockaddr *)&clientaddr,&len);
        printf("RECV : %s\n",msg);
    }
}
 
cs





결과는...


$ python tcp_client.py 

Traceback (most recent call last):

  File "tcp_client.py", line 4, in <module>

    s.connect(("localhost",8080))

  File "/usr/lib/python2.7/socket.py", line 224, in meth

    return getattr(self._sock,name)(*args)

socket.error: [Errno 111] Connection refused


connection refused 가 뜬다.




+) python 에서 udp 방식으로 바꾸면 (STREAM -> DGRAM) 통신이 된다.