udp를 사용하여 데이터 whitout 포트 포워딩을받는 방법

사용자 3416789

첫째, 나는 소켓 프로그래밍의 완전한 멍청이이기 때문에 내가 뭔가 잘못하고 있다는 것을 알려주십시오.

그래서 저는 간단한 fps 게임을 위해 udp 서버를 프로그래밍하려고했습니다.

로컬 네트워크에서는 모든 것이 잘 작동하지만 인터넷에서 코드를 사용하려고하면 몇 가지 문제가 발생합니다. 내 서버는 클라이언트 화이트 아웃 문제로부터 데이터를 수신 할 수 있으며 클라이언트에서 전송중인 포트가 열려 있으면 클라이언트에 데이터를 보낼 수 있으며 그렇지 않은 경우 클라이언트는 데이터를 수신하지 않습니다. (서버의 포트가 모두 열려 있습니다). 내 질문은 이제 포트를 열거 나 전달할 필요없이 인터넷을 통해 데이터를 수신 할 수있는 방법이 있습니까?

(client () 함수는 루프에서 지속적으로 반복됩니다)

데이터 수신을위한 내 코드는 다음과 같습니다.

import socket

server_IP = 'ip of server'
Client_port = 3560
Server_port = 5000
Client_socket = None
First_run = True
first = True

def client():
    global server_IP
    global Client_port
    global Server_port
    global Client_socket
    global first
    if first == True:
        try:
            local = ('', Client_port)
            host = (server_IP, Server_port)
            Client_socket  = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            Client_socket.bind(local)
            Client_socket.setblocking(False)
            first = False
        except:
            print("Failed")
    try:
        data, connection = Client_socket.recvfrom(512)
    except socket.error:
        return
    if data:
        #irrelevant code handling the data...

서버 전송 코드는 다음과 같이 잠 깁니다.

import socket
server_socket = None
server_port = 5000
Data_Port = 3560
print("importing the socket...")
try:
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error as msg:
    server_socket = None
try:
    server_socket.bind(("", server_port))
except socket.error as msg:
    server_socket.close()
    server_socket = None
if server_socket is None:
    print('could not open socket')
    ret = False
server_socket.sendto(Data_to_Send, ('client ip here',Data_Port))

ofc 이것은 코드의 일부일 뿐이지 만 관련성이 있다고 생각합니다. 데이터를 전송 / 수신하는 방식으로 오픈 / 포워드 포트없이 데이터를 수신 할 방법이없는 경우 plz는이를 수행 할 수있는 방법을 제안합니다.

마틴 코네 크니

UDP 홀 펀칭을 살펴보십시오.

http://en.wikipedia.org/wiki/UDP_hole_punching

기본 전제는 클라이언트가 먼저 NAT 라우팅 테이블에 항목을 생성하여 서버에 연결한다는 것입니다. 그런 다음 서버는 요청을보고 NAT 라우터가 요청을 보내는 데 사용한 포트를 확인합니다. 이 포트로 UDP 패킷을 보낼 수 있어야하며, 그런 다음 사설 네트워크의 클라이언트로 전달되어야합니다.

요약하면 포트를 3560. UDP 패킷의 출처에 따라이 포트를 변경해야합니다.

연결 기반 프로토콜 (UDP는 비 연결형) 인 TCP 사용을 고려할 수도 있습니다. 클라이언트에서 서버로 연결이 설정되면이 연결을 통해 데이터를주고받는 것이 매우 쉽습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

포트 포워딩을 수행하는 방법. Beetel 라우터를 사용하고 있습니다.

분류에서Dev

iptables를 사용하여 두 개의 인터페이스로 포트 포워딩을 수행하는 방법은 무엇입니까?

분류에서Dev

데이터 전처리 (텍스트 데이터)를 사용하여 mlflow 모델을 배포하는 방법

분류에서Dev

Unity 멀티 캐스트 UDP 소켓을 사용하여 데이터 동기화를 개선하는 방법

분류에서Dev

심포니를 사용하여 mysql 열을 업데이트하는 방법

분류에서Dev

PDO bindParam을 사용하여 mysql에 포인트 데이터를 삽입하는 방법은 무엇입니까?

분류에서Dev

Django에서 URL을 사용하여 데이터를 수신 / 포스트하는 방법은 무엇입니까?

분류에서Dev

Mac에서 R을 사용하여 데이터 포인트를 원으로 변경하는 방법 (쿼츠)

분류에서Dev

json 배열을 사용하여 직렬 및 데이터 포인트를 매핑하는 방법

분류에서Dev

SELinux를 사용하여 UDP 포트 10000에 Nginx 바인딩을 활성화하는 방법

분류에서Dev

C #을 사용하여 Excel에서 데이터 포인트를 그리는 방법은 무엇입니까?

분류에서Dev

Docker를 사용하여 다양한 UDP 포트를 노출하는 방법

분류에서Dev

TCP / IP / UDP를 통해 직렬 포트로 데이터를 전송하는 방법은 무엇입니까?

분류에서Dev

날짜 컷 포인트 데이터 세트를 사용하여 종단 이벤트 데이터를 단계에 할당하는 방법은 무엇입니까?

분류에서Dev

Wifi udp 소켓 프로그래밍을 사용하여 마우스 포인터를 제어하는 방법

분류에서Dev

Mongoose를 사용하여 데이터를 mongodb로 업데이트하는 방법

분류에서Dev

컴포넌트에서 서비스의 데이터를 사용하는 방법?

분류에서Dev

udf를 사용하여 배열을 포함하는 스파크 데이터 프레임 열을 업데이트하는 방법

분류에서Dev

C에서 포인터와 목록을 사용하여 데이터를 저장하고 작업하는 방법

분류에서Dev

컴포넌트 데이터를 소품의 값에 바인딩하는 방법

분류에서Dev

for 루프 내에서 Spark를 사용하여 데이터 세트에 열을 추가하는 방법 (여기서 for 루프에는 열 이름이 포함됨)

분류에서Dev

OpenStack Neutron : update_port () API를 사용하여 포트 vif-model을 업데이트하는 방법

분류에서Dev

linq를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

분류에서Dev

PHP를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

분류에서Dev

스마트 포인터를 사용하여 트리를 만드는 방법?

분류에서Dev

Vue 컴포넌트에 데이터를로드하는 방법

분류에서Dev

Perl을 사용하여 데이터를 테이블 형식으로 포맷하는 방법

분류에서Dev

내 ISP의 포트 차단을 우회하는 방법이 있습니까? 포트 포워딩, Ubuntu

분류에서Dev

vb.net을 사용하여 포함 된 프로젝트 리소스 (Excel 워크 시트)를 사용자의 데스크톱에 저장하는 방법

Related 관련 기사

  1. 1

    포트 포워딩을 수행하는 방법. Beetel 라우터를 사용하고 있습니다.

  2. 2

    iptables를 사용하여 두 개의 인터페이스로 포트 포워딩을 수행하는 방법은 무엇입니까?

  3. 3

    데이터 전처리 (텍스트 데이터)를 사용하여 mlflow 모델을 배포하는 방법

  4. 4

    Unity 멀티 캐스트 UDP 소켓을 사용하여 데이터 동기화를 개선하는 방법

  5. 5

    심포니를 사용하여 mysql 열을 업데이트하는 방법

  6. 6

    PDO bindParam을 사용하여 mysql에 포인트 데이터를 삽입하는 방법은 무엇입니까?

  7. 7

    Django에서 URL을 사용하여 데이터를 수신 / 포스트하는 방법은 무엇입니까?

  8. 8

    Mac에서 R을 사용하여 데이터 포인트를 원으로 변경하는 방법 (쿼츠)

  9. 9

    json 배열을 사용하여 직렬 및 데이터 포인트를 매핑하는 방법

  10. 10

    SELinux를 사용하여 UDP 포트 10000에 Nginx 바인딩을 활성화하는 방법

  11. 11

    C #을 사용하여 Excel에서 데이터 포인트를 그리는 방법은 무엇입니까?

  12. 12

    Docker를 사용하여 다양한 UDP 포트를 노출하는 방법

  13. 13

    TCP / IP / UDP를 통해 직렬 포트로 데이터를 전송하는 방법은 무엇입니까?

  14. 14

    날짜 컷 포인트 데이터 세트를 사용하여 종단 이벤트 데이터를 단계에 할당하는 방법은 무엇입니까?

  15. 15

    Wifi udp 소켓 프로그래밍을 사용하여 마우스 포인터를 제어하는 방법

  16. 16

    Mongoose를 사용하여 데이터를 mongodb로 업데이트하는 방법

  17. 17

    컴포넌트에서 서비스의 데이터를 사용하는 방법?

  18. 18

    udf를 사용하여 배열을 포함하는 스파크 데이터 프레임 열을 업데이트하는 방법

  19. 19

    C에서 포인터와 목록을 사용하여 데이터를 저장하고 작업하는 방법

  20. 20

    컴포넌트 데이터를 소품의 값에 바인딩하는 방법

  21. 21

    for 루프 내에서 Spark를 사용하여 데이터 세트에 열을 추가하는 방법 (여기서 for 루프에는 열 이름이 포함됨)

  22. 22

    OpenStack Neutron : update_port () API를 사용하여 포트 vif-model을 업데이트하는 방법

  23. 23

    linq를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

  24. 24

    PHP를 사용하여 데이터베이스의 데이터를 업데이트하는 방법

  25. 25

    스마트 포인터를 사용하여 트리를 만드는 방법?

  26. 26

    Vue 컴포넌트에 데이터를로드하는 방법

  27. 27

    Perl을 사용하여 데이터를 테이블 형식으로 포맷하는 방법

  28. 28

    내 ISP의 포트 차단을 우회하는 방법이 있습니까? 포트 포워딩, Ubuntu

  29. 29

    vb.net을 사용하여 포함 된 프로젝트 리소스 (Excel 워크 시트)를 사용자의 데스크톱에 저장하는 방법

뜨겁다태그

보관