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

文章目录

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

实现思路:

通过一台有公网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实现)相关推荐

  1. 同一个局域网下的两台电脑实现定时或者实时拷贝数据

    一. 实现两台电脑文件夹共享 0.连接两台电脑的网线 主要是在一个局域网之下,连接同一个热点WiFi也是可以的. 1. 设置两台电脑的IP 网络和共享中心--更改设配器设置--Internet 协议版 ...

  2. 局域网下实现两台电脑文件夹\硬盘共享(WIN10)

    两台电脑连接至同一网络 打开控制面板→网络和 Internet→网络和共享中心→高级共享设置 启用网络发现 win+R运行services.msc 右键Function Discovery Resou ...

  3. 两台计算机组成一个局域网的方法,两台电脑如何建立局域网

    不少网友询问小编两台电脑建立局域网的方法,其实两台电脑建立局域网的方法很简单,最重要的还是设置问题.今天,我就教大家两台电脑建立局域网的方法,有需要就一起来了解一下吧 电脑是当代社会必不可少的重要设备 ...

  4. 两台计算机如何组成局域网,如何将两台电脑连成局域网

    您可能感兴趣的话题: 局域网 核心提示:最近在网上看到有网友提问怎样将两台电脑连成局域网络实现资源共享?今天小编就简单的跟大家讲解下! 如何将两台电脑连成局域网络实现资源共享,是许多电脑爱好者很关心的 ...

  5. 通过Git在本地局域网中的两台电脑间同步代码

    通过git在局域网中搭建同步 步骤: 1.确保两台电脑在同一局域网中.(也可以是一台电脑) 2.添加一个本地的git服务中转仓库 mkdir myrepo.git cd myrepo.git git ...

  6. 两台计算机如何组成局域网,家中有两台电脑,如何在两台电脑之间建立个局域网.....

    硬件方案一:通过一台交换机来实现两台电脑建立局域网 按照两台电脑放置的距离分别做两条标准网线,现在一般都用568B的线序做网线,一条线的两头都用568B的标准做,这样的线是一头接电脑,一头接交机.这样 ...

  7. 教你一招在VMware的NAT模式下,两台电脑如何互相访问对方的虚拟机

    目录 一. 准备工作 二. 开始 2.1 设置NAT模式 2.2 进行NAT模式设置 2.3 XShell访问对方虚拟机 一. 准备工作 需要两台电脑(我准备了两台win10) VMware虚拟机:[ ...

  8. 两台计算机如何组成局域网,教你两台电脑如何建立局域网,win10系统为例

    虽然我们可以通过第三方的工具来传输文件,但是如果我们的电脑无法上网怎么办,想要两台电脑建立局域网发送大文件怎么操作呢?今天就这个两台电脑建立局域网的方法给大家讲解一下,希望可以帮助到有需要的朋友们. ...

  9. 怎样调试计算机组成局域网,如何让两台电脑建立局域网?只要一根网线就可以做到,看后明白...

    如果有两台电脑,如何给两台电脑建立局域网呢?看了下面的方法就明白了. 1.买一根对联网线.接法按照:一头568a,一头568b的网线接法.长度根据实际需要进行. 2.将同一条网线分别接在电脑的网卡上, ...

最新文章

  1. AI超算“攒机”时代到来:为降低算力成本,这家公司牵头开放硬件标准
  2. review——C# (6)虚方法和覆写方法
  3. 信息熵和交叉熵的细节理解
  4. 合并远程仓库到本地_git远程仓库创建和合并
  5. POJ 1986:Distance Queries(倍增求LCA)
  6. 基于集成学习的小麦赤霉病高光谱图像识别方法研究
  7. Leetcode 79.单词搜索
  8. numpy - np.reshape:将二维数组转变三维数组
  9. 域名转出与转入,以新网到万网之间的转移为例
  10. freemarker制作word模板
  11. html校验邮箱格式,邮箱格式验证 方法总结
  12. 问题 K: 蜗牛1534
  13. element-ui 响应式布局
  14. BUGKU-成绩查询
  15. 使用免费证书安装 ipa 到真机
  16. 服务器内存占用过高处理步骤
  17. 谷歌云| 5 个 GKE 功能可帮助您优化集群
  18. cesium turf.js展示两多边形相交区域
  19. 不要叫我程序媛,要叫我女程序员!
  20. 如何获取天勤 INFO-通知: 下单成功

热门文章

  1. 建立Windows Embedded Compact 7开发环境
  2. WINCE下如何虚拟多个串口
  3. N6-旋转数组的最小元素
  4. FFmpeg 源码学习(一):avformat_open_input 源码分析
  5. 转载 C++实现的委托机制
  6. android 如何将电话簿SDN数字和其他普通的数字混合在一起?
  7. KOFLive Beta Daily-Scrum 8
  8. Linux里设置环境变量的方法(export PATH)
  9. 机器学习知识点(一)文本字符信息熵Java实现
  10. 日志分析平台ELK部署初学