python实现socket通信 python不同程序间通信
- 软件开发
- 2023-08-13
- 228
利用python实现局域网间的通信1.使用python的socket模块吧,网上例子很多,也可以参考《python网络编程》这本书;python中的handle是什么方...
利用python实现局域网间的通信
1.使用python的socket模块吧,网上例子很多,也可以参考《python网络编程》这本书;
python中的handle是什么方法
在Python中,handle是一个通用的词,经常用于表示某个对象、资源或连接。我们可以通过handle来操作和管理这些东西。
常见的Pythonhandle有:
1.文件handles
在使用Python操作文件时,我们使用文件handles来表示文件对象。
例如:
python
f=open("file.txt")#创建一个文件handle
data=f.read()#使用handle读取文件内容
f.close()#关闭文件handle,释放资源
这里`f`就是文件handle,我们通过它读取和操作文件。
2.Sockethandles
我们通过socket的handle表示Socket连接,并通过它来发送和接收数据。
例如:
python
s=socket.socket()#创建sockethandle
s.connect(("www.google.com",80))#使用handle建立连接
s.send(b"GET/HTTP/1.1\r\nHost:google.com\r\n\r\n")
data=s.recv(1024)#使用handle接收数据
这里`s`就是Socket的handle。
3.数据库连接handles
例如用pymysql,我们通过游标cursor表示一个数据库会话:
python
connection=pymysql.connect(...)
cursor=connection.cursor()#获取数据库连接handle
cursor.execute("SELECT*FROMusers")
results=cursor.fetchall()
cursor.close()#关闭handle
总的来说,在Python中,通过表示资源、对象或连接的handle,可以进行相应的操作。
handle值得注意的是:
-每次操作结束后,应及时关闭handle,以释放资源
-多个handle可同时存在,无需关闭的操作的handle
socket服务器怎么识别不同端口
在Socket服务器中,不同的端口用于识别不同的网络服务或应用程序。每个网络服务或应用程序都可以通过不同的端口与服务器进行通信。
当Socket服务器启动时,它会监听一个或多个指定的端口。当客户端尝试连接到服务器时,它会使用特定的端口号来建立连接。服务器通过检查连接请求中的目标端口号来确定客户端请求的是哪个服务或应用程序。
一旦服务器识别出客户端请求的服务或应用程序,它会将连接分配给相应的处理程序或线程来处理。这样,服务器可以同时处理多个不同端口的连接请求,并为每个连接提供相应的服务。
需要注意的是,端口号是一个16位的整数,范围从0到65535。其中,0到1023的端口号被称为“知名端口”,用于一些常见的网络服务,如HTTP(端口号80)、FTP(端口号21)等。而1024到65535的端口号被称为“动态端口”,用于临时分配给客户端连接。
总结起来,Socket服务器通过检查连接请求中的目标端口号来识别不同的端口,并将连接分配给相应的处理程序或线程来提供相应的服务。
Python的socket模块中的bind
accept_thread=threading.Thread(target=accept,args=(s,))accept_thread.start()defaccept(s):whileTrue:conn,accept=s.accept()thread_send=MyThread(conn,addr)thread_recv=MyThread(conn,addr)thread_send.start()thread_recv.start()
docker 默认的socket端口
关于容器端口和主机端口的关系
首先,我们在创造容器时,如果不指定端口映射,那么这个容器时封闭的,不能与外界网络通信。而我们一般情况下则需要指定端口映射,使得我们可以通过主机的端口访问到容器。我们常用dockercontainerrun-p8080:80-d*progamme_name*这里我们将容器的80端口映射到主机的8080端口,之后我们就可以通过主机的8080端口访问到容器了。如果想要公开容器的所有端口,则可以用dockercontainerrun-P系统会“随机”分配端口到主机端口。
Socket端口配置
我们在容器内运行一个python的socket服务时,这时需要制定绑定的Ip和端口,我们需要注意的是我们虽然映射了端口到主机,但是绑定的ip不是主机的ip,而是容器内的ip,可以通过ifconfig进行查询,或者直接使用0.0.0.0来接受所有ip的该端口请求
关于0.0.0.0和127.0.0.1和其他ip的关系
这里有个基础知识,127.0.0.1是每台主机的环回地址,只用来自身的网络测试,而不会和外部通信,然后还有inet内部Ip,用于一个公网集群内的主机间的通信,外网访问不了,公网ip一般是多台主机共享。最后0.0.0.0则是表示所有可用的ip.
python获取当前socket连接状态,是连接还是断开
socket建立连接后,你可以在上面加一个超时,如果超时异常出现就是断开了。
另外可以用select(inlist,writelist,errorlist,timeout)的办法,去轮询它。超过比如60秒,就认为它超时。
在操作系统层面,你可以用netstat找到这个socket连接,看它的TCP状态。如果到了CLOSE_WAIT,TIME_WAIT,就是对方或者是自己关闭了。如果是FIN2.。。。SEN。。或者是SYN_XXX就是还是连接或者是发送状态中。
通常这些状态在操作系统的TCP协议里都设置有超时。如果超时过了,它自己会关闭。然后变成WAIT状态。
本文链接:http://xinin56.com/ruanjian/170.html