Python 3问题:处理服务器/客户机问题

Python 3问题:处理服务器/客户机问题,python,python-3.x,client-server,Python,Python 3.x,Client Server,因此,本周我的课程让我做了一个tcp服务器/客户端,其中信息通过连接传递,然后由服务器解析。所以我已经为这两个都写了代码,但是我得到了一些我不理解的返回错误。我应该返回状态字节、分区类型和第一节地址的信息。我不明白为什么我会遇到客户机的问题,当消息是二进制的,这就是为什么我没有使用(我想!),我也不认为我在多个地方为服务器使用套接字。我该怎么收拾这乱七八糟的东西?我说过我只是在学习Python吗?因为我是 客户端代码: import socket import sys #Create a TC

因此,本周我的课程让我做了一个tcp服务器/客户端,其中信息通过连接传递,然后由服务器解析。所以我已经为这两个都写了代码,但是我得到了一些我不理解的返回错误。我应该返回状态字节、分区类型和第一节地址的信息。我不明白为什么我会遇到客户机的问题,当消息是二进制的,这就是为什么我没有使用(我想!),我也不认为我在多个地方为服务器使用套接字。我该怎么收拾这乱七八糟的东西?我说过我只是在学习Python吗?因为我是

客户端代码:

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()