失败的尝试!python如何使用socket建立TCP连接?

本来很简单的事情(只是想尝试一下网络聊天程序)

我尝试过先让服务器(我的电脑)使用静态ip,再用python的 gethostname() 和 gethostbyname() 获取当前(服务器)的ip,然后线下和朋友说,之后让朋友尝试连接这个地址建立TCP连接。但是朋友使用了pycharm反映报错:连接超时,也就是没连上。全程我服务器上相应提供连接服务的程序都是开着的,检查了一下我绑定的和朋友连接的端口也没问题。之后我又和朋友交换了一下,他当服务器我访问,但是因为同样的问题失败了。

img

我使用python10自带的编辑器。通讯使用socket模块。网络聊天程序是网上摘下来的,自己改了关于服务器绑定地址和客户端连接地址部分的代码(因为原来代码里都使用127.0.0.1代替了),修改后本机测试是通过了(自己同时当服务器和客户端),但是一旦不在一台电脑上就出现上述问题,望解答。

192.168.xxx这种IP只能访问同一局域网连接下的其他设备

建立 TCP 连接需要分为服务端和客户端两个部分。

服务端:

在服务器上使用 socket 模块创建一个套接字,使用 bind 函数将其绑定到一个 IP 地址和端口,然后使用 listen 函数将该套接字设置为监听状态。当客户端连接该服务端套接字时,使用 accept 函数接受连接请求,返回一个新套接字,该套接字可以用于服务端与客户端之间的数据交流。

以下是 Python 代码示例:

import socket

HOST = ''  # 服务端 IP 地址,可填空字符串表示任意IP地址
PORT = 12345  # 服务端端口号

# 创建套接字,绑定到指定地址和端口,并开始监听
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # IPV4 TCP
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 允许地址重用
server_socket.bind((HOST, PORT))
server_socket.listen(5)  # 开始监听,最多允许 5 个连接队列

# 接受客户端连接请求,返回一个新的套接字
conn, addr = server_socket.accept()
print('Connected by', addr)

# 在新套接字上接受客户端发送的数据,并显示
data = conn.recv(1024)
print('Received:', data.decode())

# 关闭套接字
conn.close()
server_socket.close()

客户端:

在客户端上使用 socket 模块同样创建一个套接字,然后使用 connect 函数连接到服务端指定的 IP 地址和端口。连接成功后,使用套接字的 send 方法发送数据到服务端,并使用 recv 函数接收服务端返回的数据。

以下是 Python 代码示例:
i

import socket

HOST = '192.168.1.100'  # 服务端 IP 地址
PORT = 12345  # 服务端端口号

# 创建套接字,连接到指定地址和端口
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))

# 在套接字上发送数据到服务端
client_socket.sendall(b'Hello, World!')

# 在套接字上接受服务端发送的数据,并显示
data = client_socket.recv(1024)
print('Received:', data.decode())

# 关闭套接字
client_socket.close()

注意,当客户端和服务端不在同一个局域网内时,需要在网络路由器上配置端口转发规则,将外部请求转发到相应的内网地址和端口上。另外,还需要安全考虑,可以使用 SSL/TLS 协议等加密手段,确保数据在传输过程中不被窃取或篡改。

希望这些解释和示例代码能够帮助您解决问题。

参考 https://blog.csdn.net/knight_hyz/article/details/103673282