用户:
苹果真好吃查看:112 回复:8 评论:37 创建时间:2024-01-30T21:36:24
里面任何一个值都不要改,直接运行(海龟一般不会提示安装库),服务器(我本人的电脑)14:00到晚上9:00开启(现在还在开),快进来看看!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
import os
import uuid
import time
import threading
from socket import *
from tkinter import *
serverName = '192.168.2.65'#服务器外网IP
serverPort = 1
root = Tk()
root.title('聊天室')
text = Text(root,width = 100,height = 20)
scroll = Scrollbar(root)
scroll.pack(side = RIGHT,fill = Y)
scroll.config(command = text.yview)
text.config(yscrollcommand = scroll.set)
text.pack()
entry = Entry(root,bd = 5,width = 70)
entry.pack(side = LEFT)
entry2 = Entry(root,bd = 5,width = 20)
clientSocket = socket(AF_INET, SOCK_STREAM)
print('正在连接...')
clientSocket.connect((serverName,serverPort))
print('连接成功!')
msg = clientSocket.recv(2048)#先接收历史记录
if msg.decode() != 'NO_MESSAGE':#有历史记录时
text.insert(END,msg.decode() + '\n----以上是历史记录----\n')
text.see(END)
def get_mac_address():#由于用户名可以随时换,用MAC地址作为标识了
mac = uuid.UUID(int = uuid.getnode()).hex[-12:]
return ':'.join([mac[e:e+2] for e in range(0,11,2)])
def timemark():
timestamp = int(time.time())
timestr = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timestamp))
return '[' + timestr + ']'
def send():
if entry2.get().replace(' ','') == '':
text.config(state = 'normal')
text.insert(END,'请输入用户名!\n')
text.see(END)
text.config(state = 'disabled')
return
if entry.get() == '':
text.config(state = 'normal')
text.insert(END,'发送内容不能为空!\n')
text.see(END)
text.config(state = 'disabled')
else:
clientSocket.send((timemark() + ' ' + get_mac_address() + ' - ' +
entry2.get() + '\n ' + entry.get()).encode())
entry.delete(0,'end')
button = Button(root,text = 'SEND',command = send)
button.pack(side = RIGHT)
entry2.pack(side = RIGHT)
class myThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
msg = clientSocket.recv(2048)
text.config(state = 'normal')
text.insert(END,msg.decode() + '\n')
text.see(END)
text.config(state = 'disabled')
textThread = myThread()
textThread.start()
root.mainloop()
iOrangesoftok,火速来测试
点赞0
评论
连不上啊
别把我电脑挤爆了
报啥错
主机没有正确响应
你在哪个城市,太远了可能连不上
湖南南部
TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
那就是太远了,连不上,乌鲁木齐市应该可以
你再试一次,我重启了
还是没连上,你试试挂个cdn
我要关服了,11点左右会再次启动
我这光纤宽带网这么差
对了,IDLE有些连不了
苹果真好吃一共有2次IP地址变更,将第7行绿色部分改为192.168.31.171,从明天15:00开始开启24h不间断服务
点赞0
评论
注意啦,端口改6551,mac服务器1会报错
开服啦兄弟们
给一个很简单的建议,就是用ngrok(或花生壳)进行内网穿透,这样可以跨网段通信
你这么写的话是只能在同一路由(网段)下的,包括IP也是网段下NAT转发的子网IP,要开服必须借助穿防火墙后的IPv6(无NAT)、公网IP云服务器和内网穿透的任一个,看自己的技术需求
ngrok国内比较稳定,但是要用github账号
而且要注意公网传输的丢包和中间人攻击问题,短包不容易丢,但我当年做480000长包是被黏包和丢包折腾了好久的(后来也因为这个把项目废了
所以我要用mac地址是吗
额,我测试过两台IPV4地址不同的主机连接,可以正常使用啊
我对网络编程这方面也不是很懂,你们也应该能看出来,有些代码不是我自己写的
我用IPV6可以是吧,那我试试IPV6
我直接整144.144.144.144吧
dns好像不行
你猜猜为什么家用宽带路由下叫“局域网”
说细一点的话,网络的传输速率和丢包率跟硬件都有关系的,T C P/IP是基于MAC,而U D P则作为http类的协议,具体看一下网络七层协议,到T C P这里就很成熟了,几乎不会丢包,主要还是要和甜蜜的算法斗智斗勇
长距离并不是主要问题,你的代码跨省市跑不了正常,甚至你到隔壁用邻居家wifi也访问不了,因为宽带入户是绝对会有NAT转发和DH喵分配网段IP的,IPv4公网地址早分配完了,现在要那个只能跪求运营商/云服务器/内网穿透
基于T C P/I P的直接对于IP的链接不需要dns过程,dns是指从域名到IP的解析,T喵/IP已经完成寻址和路由计算的算法了,所以不会是dns的问题(再说python socket本来也可以直连域名
广播地址通常只针对一个网段?我不是很清楚,但是这个肯定解决不了跨网段的
IPv6下没有NAT但是运营商DH喵定期改IP真的烦,而且要注意路由一般是有防火墙的,如果要用的话记得开放端口(工信部23/8/6新规可以自己学习一下,现在我穿透用的是喵的服(只有这一个近的。。。,加上调试属性,应该不用报备
此外,我记得dns也是墙常见的表征之一,墙的很多体征就是dns过程中由运营商发动dns劫持/污染,Dot和Doh有时候可以缓解,但是仅对于github之类中性的有效(github有时候访问不了很可能和运营商是有一定关系的
https://shequ.codemao.cn/work/214910535
哥们儿要是能看到的话可以看看我github的开源代码 https : // github. com /jczzc2 /CTSever-Re 看一看
点赞0
评论
那个完成了整个社区从储存、交流到管理的比较完全的解决方案,并基本完成了公网传输的整备,可以用内网穿透做跨网段的
写了我半年