Python 3问题:处理服务器/客户机问题
因此,本周我的课程让我做了一个tcp服务器/客户端,其中信息通过连接传递,然后由服务器解析。所以我已经为这两个都写了代码,但是我得到了一些我不理解的返回错误。我应该返回状态字节、分区类型和第一节地址的信息。我不明白为什么我会遇到客户机的问题,当消息是二进制的,这就是为什么我没有使用(我想!),我也不认为我在多个地方为服务器使用套接字。我该怎么收拾这乱七八糟的东西?我说过我只是在学习Python吗?因为我是 客户端代码:Python 3问题:处理服务器/客户机问题,python,python-3.x,client-server,Python,Python 3.x,Client Server,因此,本周我的课程让我做了一个tcp服务器/客户端,其中信息通过连接传递,然后由服务器解析。所以我已经为这两个都写了代码,但是我得到了一些我不理解的返回错误。我应该返回状态字节、分区类型和第一节地址的信息。我不明白为什么我会遇到客户机的问题,当消息是二进制的,这就是为什么我没有使用(我想!),我也不认为我在多个地方为服务器使用套接字。我该怎么收拾这乱七八糟的东西?我说过我只是在学习Python吗?因为我是 客户端代码: import socket import sys #Create a TC
import socket
import sys
#Create a TCP/IP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Connect the socket to the port where the server is listening
server_address = ('localhost', 10000)
print(sys.stderr, 'connecting to %s port %s' % server_address)
sock.connect(server_address)
try:
#Send data
#filename = 'block.dd'
message = open('block.dd', 'rb')
print(sys.stderr, 'sending "%s"' % message)
message.close()
sock.sendall(message)
#Look for the response
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = sock.recv(16)
amount_received += len(data)
print(sys.stderr, 'received "%s:' % data)
finally:
print(sys.stderr, "closing socket")
sock.close()
服务器输出:
Traceback (most recent call last):
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> starting up on localhost port 10000
File "C:/Users/jesse/PycharmProjects/untitled/CYBR-260-40A/Week 4/KimmelFreeman_Jessica_CYBR260_40A_Week4ProgrammingAssignment.py", line 18, in <module>
sock.bind(server_address)
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
Process finished with exit code 1
回溯(最近一次呼叫最后一次):
正在本地主机端口10000上启动
文件“C:/Users/jesse/PycharmProjects/untitled/CYBR-260-40A/第4周/KimmelFreeman_Jessica_CYBR 260_40A_Week4ProgrammingAssignment.py”,第18行
sock.bind(服务器地址)
OSError:[WinError 10048]通常只允许对每个套接字地址(协议/网络地址/端口)使用一次
进程已完成,退出代码为1
在客户端上,message=open('block.dd','rb')
是而不是字节。因此您需要读取文件message.read()
。我想你需要
客户:
import socket
import sys
#Create a TCP/IP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Connect the socket to the port where the server is listening
server_address = ('localhost', 10000)
print(sys.stderr, 'connecting to %s port %s' % server_address)
sock.connect(server_address)
try:
#Send data
#filename = 'block.dd'
message = open('block.dd', 'rb')
sdata = message.read()
print('sending "%s"' % sdata)
sock.sendall(sdata)
message.close()
#Look for the response
amount_expected = len(sdata)
while amount_expected:
data = sock.recv(16)
amount_expected -= len(data)
print('received "%s:' % data)
finally:
print(sys.stderr, "closing socket")
sock.close()
Traceback (most recent call last):
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'> starting up on localhost port 10000
File "C:/Users/jesse/PycharmProjects/untitled/CYBR-260-40A/Week 4/KimmelFreeman_Jessica_CYBR260_40A_Week4ProgrammingAssignment.py", line 18, in <module>
sock.bind(server_address)
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
Process finished with exit code 1
import socket
import sys
#Create a TCP/IP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Connect the socket to the port where the server is listening
server_address = ('localhost', 10000)
print(sys.stderr, 'connecting to %s port %s' % server_address)
sock.connect(server_address)
try:
#Send data
#filename = 'block.dd'
message = open('block.dd', 'rb')
sdata = message.read()
print('sending "%s"' % sdata)
sock.sendall(sdata)
message.close()
#Look for the response
amount_expected = len(sdata)
while amount_expected:
data = sock.recv(16)
amount_expected -= len(data)
print('received "%s:' % data)
finally:
print(sys.stderr, "closing socket")
sock.close()