首次连接后Python UDP套接字不起作用

Aleksej_Shherbak

我正在训练在 python 上制作简单的应用程序,该应用程序可与套接字一起使用并使用 UDP 协议。我有一个 client.py 和 server.py。我想在无限循环中将消息从客户端发送到服务器并从服务器捕获响应消息。为了做到这一点,我有以下代码:

服务器.py

import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 8000
print(host)
print(port)
serversocket.bind((host, port))

serversocket.listen(5)
print('server started and listening')
while 1:
    (clientsocket, address) = serversocket.accept()
    print("connection found!")
    data = clientsocket.recv(1024).decode()
    print(data)
    r = 'I can hear you by UDP!!!!'
    clientsocket.send(r.encode())

客户端.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 8000
addr = (host, port)
s.connect(addr)


def send(user_input):
    s.sendto(user_input.encode(), addr)
    data = s.recv(1024).decode()
    print('Server tell that: ', data)


while 1:
    if input('Exit? (y/n)') == 'y':
        break
    i = input('>> ')
    send(i)

s.close()

它工作正常,但是当我尝试第二次发送消息时,我的程序停止在线

s.sendto(user_input.encode(), addr)

我不明白这一刻发生了什么。

狮身人面像

如果您想为 UDP 构建服务器/客户端,您需要仔细阅读文档以防止使用面向连接协议的 API。

下面是 UDP 的一个工作示例:(我在代码中添加了一些注释,然后你就会明白为什么要调整它们)。

服务器:

对于一台 UDP 服务器,您需要使用一个套接字socket.SOCK_DGRAM而不是进行初始化SOCK_STREAM,然后绑定您想要的端口。

import socket

#The type of communications between the two endpoints, typically SOCK_STREAM for connection-oriented protocols and SOCK_DGRAM for connectionless protocols.
serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = "127.0.0.1"
port = 8000
print(host)
print(port)
serversocket.bind((host, port))

#serversocket.listen(5)  #--This method sets up and start TCP listener.
print('server started and listening')
while 1:
    #(clientsocket, address) = serversocket.accept() #---This passively accept TCP client connection, waiting until connection arrives (blocking)
    #print("connection found!")
    #data = clientsocket.recv(1024).decode() #This method receives TCP message
    data, addr = serversocket.recvfrom(2048)
    print(data)
    r = 'I can hear you by UDP!!!!'
    serversocket.sendto(r.encode(), addr)
serversocket.close()

客户:

对于一个 UDP 客户端,您需要使用socket.SOCK_DGRAM代替初始化一个套接字SOCK_STREAM,然后使用sendto将数据发送到服务器。

import socket
#The type of communications between the two endpoints, typically SOCK_STREAM for connection-oriented protocols and SOCK_DGRAM for connectionless protocols.
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = "127.0.0.1"
port = 8000
addr = (host, port)
#s.connect(addr) #---This method actively initiates TCP server connection.


def send(user_input):
    s.sendto(user_input.encode(), addr)
    data = s.recvfrom(1024).decode()
    print('Server tell that: ', data)


while 1:
    if input('Exit? (y/n)') == 'y':
        break
    i = input('>> ')
    send(i)

s.close()

欲知更多详情

检查Python 套接字

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

套接字连接的单例类不起作用

来自分类Dev

在Store App中创建套接字连接不起作用

来自分类Dev

套接字接收后的 Memcpy 不起作用

来自分类Dev

Python套接字在主机和VM之间不起作用

来自分类Dev

Python异步套接字接收不起作用

来自分类Dev

Python套接字在主机和VM之间不起作用

来自分类Dev

从线程调用时,Python 套接字 accept() 不起作用

来自分类Dev

不使用ip时c ++套接字连接不起作用

来自分类Dev

不使用ip时c ++套接字连接不起作用

来自分类Dev

Tcp套接字在生成{error,closed}后在erlang中的远程节点上不起作用?

来自分类Dev

Android中的多线程服务器套接字,可从连接的客户端接收图像-不起作用

来自分类Dev

观看连接功能首次使用,但此后不起作用

来自分类Dev

首次上传文件后,PHP脚本不起作用

来自分类Dev

首次用户输入后,此代码将不起作用

来自分类Dev

NOT IN 关键字在 mysql 查询后不起作用?

来自分类Dev

套接字超时不起作用

来自分类Dev

套接字编程不起作用

来自分类Dev

套接字超时不起作用

来自分类Dev

Java套接字超时不起作用

来自分类Dev

Python UDP套接字,未知延迟

来自分类Dev

Python UDP套接字文件传输

来自分类Dev

连接不起作用

来自分类Dev

套接字连接在3次迭代后中止-python

来自分类Dev

超时套接字连接Python后如何调用异常?

来自分类Dev

python if else 在重构后不起作用

来自分类Dev

在已连接的UDP套接字上使用send()

来自分类Dev

WSA UDP套接字被强制关闭连接,因此无法重用

来自分类Dev

“已连接”UDP 套接字,双向通信?

来自分类Dev

套接字获取HTML响应不起作用

Related 相关文章

热门标签

归档