小白学习python总是跌跌撞撞,本次是在B站学一个叫“娟姐”的python课程,up主名称是叫Python_子本。学到TCP服务器端和TCP客户端进行通信时,按部就班的写好代码,但是遇到一个服务器端的报错:Socket 错误:由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
服务器端的代码如下:
from socket import socket , AF_INET,SOCK_STREAM
# AF_INET,用于Intrenet之间的进程通信
# SOCK_STREAM,表示用TCP协议进行编程
# (1)创建socket对象
server_socket = socket(AF_INET,SOCK_STREAM)
# (2)绑定IP地址和端口
ipaddress = '127.0.0.1'
port = 8888
server_socket.bind((ipaddress,port))
# (3)使用Listen开始监听
server_socket.listen(5)
print("服务器已启动!")
# (4)等待客户端的连接
client_socket, client_address = server_socket.accept()
# (5)接收来自客户端的数据
data = server_socket.recv(1024)
# 要求客户端发送过来的数据使utf-8格式进行解码
print("客户端发送过来的数据为:", data.decode('utf-8'))
# (6)关闭socket
server_socket.close()
客户端的代码如下:
import socket
# (1)创建客户端对象
client_socket = socket.socket()
# (2)绑定IP地址和端口
ipaddress = '127.0.0.1'
port = 8888
# 向服务器端发起请求
client_socket.connect((ipaddress,port))
print("与服务器连接建立成功")
# (3)向服务器发送数据,用utf-8格式进行编码
client_socket.send("您好,中国!".encode('utf-8'))
# (4)关闭socket
client_socket.close()
print("数据发送完毕!")
先运行服务器,再运行客户端之后就会报以下错误:

查阅资料之后,server_socket是指Socket,但执行accept()的client_socket,所以在接收数据时,我们应该用client_socket.recv(1024)获取client返回过来的数据。其实刚学,我也不太清楚这个逻辑,但是尝试着调整了一下,改成以下代码:
data = client_socket.recv(1024)
便可以成功接收了,估计自己在Python里还有一段路程才能搞清楚这儿的逻辑,目前不能通俗易懂的分享给各位!!!


1万+

被折叠的 条评论
为什么被折叠?



