欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

TCP实现在不同局域网下的两台电脑网络通信(Python实现)

发布时间:2025/4/16 python 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 TCP实现在不同局域网下的两台电脑网络通信(Python实现) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

之前,我曾做过在局域网下进行通信的东西。(主要是我发现没有办法把那个东西用在不同的局域网的两台电脑)。心里一直想实现一个能在广域网上能通信的东西!所以就有这个小项目!

文章目录

      • 实现思路:
      • 技术概念
      • 使用方法
      • 测试结果
      • 代码

实现思路:

通过一台有公网IP的服务器作为中转站。将局域网下的电脑转给这个中转的服务器,然后这个中转的服务器将收到的数据转给另外的一台电脑就好了。

技术概念

下面的技术都是为了实现全双工嘿嘿,而且也要保证传输的时候较为同步(网络IO)

  • 服务器多线程,接受的信息(分两个线程)
  • 客户端实现多线程,接受信息的同时多线程输入。

使用方法

  • 在一个服务器(在公网上)运行服务端代码。(这里我用的是,我在阿里云租的服务器)
  • 两个人(我这里,只实现了两个人聊天的情况),分别在自己的电脑上运行起客户端代码(或者编译好的客户端程序(.exe格式))。
  • 然后,直接就可以开始聊天了~
  • 可以在任何时候输入信息,敲回车就可以发出去了。
  • 输入空的信息就可以结束了,也就敲一个回车就好了。(如果一方结束了,但是另外一方没结束就是发了,对方也收不到~ 类比于离线状态发信息

测试结果

下面是一个受到一个远端的信息情况和发一个信息的情况。其实这是一个全双工聊天工具,只不过我这个演示有点不好,没展示出来 hhh 而且这些都是手工build-wheel型hh很适合学习~ 哈哈哈

[Sat Mar 3 23:52:23 2018] : Hello
what?

代码

客户端代码:

from socket import * import threading from time import ctimedef recv(sock, BUFSIZ):try:data = sock.recv(BUFSIZ)except OSError:return # find it was close, then close itif data.decode() is '[CHAT]BEGIN':print(data.decode())elif data.decode() is '[CHAT]END':sock.close()else:print('[%s]' % ctime(), ':', data.decode())if __name__ == '__main__':HOST = '服务器的公网IP地址'POST = 21567ADDR = (HOST, POST)tcpCli = socket(AF_INET, SOCK_STREAM)tcpCli.connect(ADDR)threadrev = threading.Thread(target=recv, args=(tcpCli, 1024))threadrev.start()while True:data = input()if not data:breaktcpCli.send(data.encode())tcpCli.close()

服务端代码~(运行在一个服务器上)

from socket import * import threadingdef trans(sock1, sock2, BUFSIZ):while True:try:data = sock1.recv(BUFSIZ)except OSError:breakif not data:sock1.close()else:try:sock2.send(data)except OSError:sock1.close()breakif __name__ == '__main__':HOST = ''POST = 21567ADDR = (HOST, POST)tcp = socket(AF_INET, SOCK_STREAM)tcp.bind(ADDR)tcp.listen(3)Users = []Addrs = []Trans = []while len(Users) != 2:tcpCli, addr = tcp.accept()Users.append(tcpCli)trans1 = threading.Thread(target=trans, args=(Users[0], Users[1], 1024))trans1.start()while True:try:data = Users[1].recv(1024)except OSError:breakif not data:Users[1].close()else:try:Users[0].send(data)except OSError:Users[1].close()breaktcp.close()

总结

以上是生活随笔为你收集整理的TCP实现在不同局域网下的两台电脑网络通信(Python实现)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。