Socket
程序员文章站
2022-07-11 08:29:15
...
什么是Socket?
所谓的Socket也被人称之为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序常通过‘套接字’向用户发出请求或者应答网络请求。说白了,就是一种通信机制。
它起源于unix,而unix/Linux的哲学就是”一切皆文件”,都可以通过”打开(open)—读写(read/write)—关闭(close)“模式来操作。Socket就是该模式的一个实现,socket是一个特殊文件,通过socket函数对他进行操作。
通信流程:
Socket编程思路
TCP服务端:
1 创建套接字,绑定套接字到本地IP与端口
# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind()
2 开始监听连接 #s.listen()
3 进入循环,不断接受客户端的连接请求 #s.accept()
4 然后接收传来的数据,并发送给对方数据 #s.recv() , s.sendall()
5 传输完毕后,关闭套接字 #s.close()
TCP客户端:
1 创建套接字,连接远端地址
# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()
2 连接后发送数据和接收数据 # s.sendall(), s.recv()
3 传输完毕后,关闭套接字 #s.close(
Socket类型
Socket函数
服务端例子:
#!/bin/env python
import socket ##导入socket模块
import commands ##该模块类似于os,执行linux的命令
HOST="192.168.137.102" ##服务端名字
PORT=50007 ##端口号
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
##建立一个Socket(套接字)
s.bind((HOST,PORT)) ##将套接字与本地的IP以及端口绑定
s.listen(2) ##开始监听TCP传入的连接,并且设置最大同时监听数为2
conn,addr=s.accept() ##接受TCP连接,并且返回一个新的套接字conn,conn可以继续接受数据,发送数据。addr为发送TCP连接的地址。
print 'Connected by',addr
while 1:
data = conn.recv(1024) ##一次性接受最大的数量为1K
if not data:break
#conn.sendall(data) ##一次性全部发送给客户端
cmd_result = commands.getstatusoutput(data) ##通过commands模块,执行客户端传来的linux命令
conn.sendall(cmd_result[1]) ##将返回的结果发给客户端
print data
print "*"*60
conn.close() ##传输完成,关闭套接字
客户端:
#!/bin/env python
import socket
HOST='192.168.137.102'
PORT=50007
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((HOST,PORT)) ##与服务端连接,IP,PORT需一样
while 1:
user_input = raw_input("message to send::").strip() ##输入传输的内容,并去除前后的空格
if len(user_input) == 0: ##如果输入为空
continue ##跳出循环
s.send(user_input) ##发送传入的内容至服务端
data=s.recv(1024) ##服务端返回的结果一次只接受1k
print 'Received',repr(data)
s.close() ##关闭套接字