TCP实现在不同局域网下的两台电脑网络通信(Python实现)
生活随笔
收集整理的这篇文章主要介绍了
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实现)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Centos(阿里云) 安装python
- 下一篇: [解析]多线程加锁Lock调用pytho