欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Socket

程序员文章站 2022-07-11 08:29:15
...

什么是Socket?
所谓的Socket也被人称之为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序常通过‘套接字’向用户发出请求或者应答网络请求。说白了,就是一种通信机制。
它起源于unix,而unix/Linux的哲学就是”一切皆文件”,都可以通过”打开(open)—读写(read/write)—关闭(close)“模式来操作。Socket就是该模式的一个实现,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

Socket函数
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()       ##关闭套接字

上一篇: Socket

下一篇: socket