【发布时间】:2019-09-08 17:27:28
【问题描述】:
请允许我开始说我是 Python 新手(CS 一年级学生),这是我正在学习的第一门编程语言。
我有一个包含 2 个部分的作业;客户端和服务器
在服务器端我正在尝试:
1) 创建一个不断等待 UDP 消息并等待两个不同的 UDP 消息(字符串 1 和字符串 2)的服务器
2) 然后它将 2 个数据包的字符串连接为 string3,并在单个 UDP 数据包中将其发送到客户端并重新开始。
例如服务器接收string1和string2为pinea和pples,构造菠萝为string3并将string3发送给客户端
在客户端,我需要编写一些代码: 1) 启动时提示客户端输入字符串#
2) 将该字符串拆分为 2 (n/2 如果 n 是偶数并且 (n+1)/2 和 (n-1)/2 如果 n 是奇数)
3) 在单独的 UDP 数据包中等待来自服务器的字符串
4) 检查来自服务器的字符串是否 = 两个拆分字符串的连接
5) 显示最终答案的结果
例如用户输入字符串为菠萝,客户端发送字符串 1 和字符串 2 为 pinea 和 pples;然后从服务器接收 string3 作为菠萝并检查 string3==string1+string2。
我想弄清楚为什么在设置我的服务器后我无法向服务器发送数据包。
我目前正在使用 Python IDLE 3.7.3,我观看了很多视频并阅读了其他一些堆栈溢出论坛,但无法确定问题所在,如前所述,我是初学者,将不胜感激任何帮助
这是我的代码:
对于我拥有的服务器:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ("127.0.0.1", 5002)
sock.bind (address)
while True:
data,addr= sock.recvfrom(1024)
print (data)
print (addr)
sock.listen(5)
我的客户端代码如下:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s=str(input("Please input a word: "))
string1 = s[:len(s)//2]
string2 = s[:len(s)//2:]
message1= string1.encode()
message2= string2.encode()
sock.sendto(message1+message1,("127.0.0.1",5002))
received= sock.recv(1024)
received==string1+string2
while True:
print (message1, message2)
print (received)
当我尝试运行我的客户端代码时,我目前收到错误消息“现有连接被远程主机强制关闭”。
非常感谢(这也是我第一次使用 Stack Overflow,所以如果我在帖子中做了任何不恰当的事情,请告诉我,以便我纠正)
【问题讨论】:
-
received==?....最后一个while循环只是永远打印? -
请不要在每个代码行都加倍空格,或者给所有代码行添加额外的缩进。如果您认为编辑器/IDE 对代码的运行方式有任何影响,请直接使用 Python 从命令行运行它。