python socket编程
admin
2023-03-24 12:21:24
0

建立服务器连接需要六个步骤。

第1步是创建socket对象。调用socket构造函数。

socket=socket.socket(familly,type)
family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可以是AF_INET(对于IPV4协议的TCP和 UDP),至于type参数,SOCK_STREAM(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接字)。

第2步则是将socket绑定(指派)到指定地址上,socket.bind(address)

address必须是一个双元素元组,((host,port)),主机名或者ip地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。

第3步,绑定后,必须准备好套接字,以便接受连接请求。

socket.listen(backlog)
backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。

第4步,服务器套接字通过socket的accept方法等待客户请求一个连接:

connection,address=socket.accept()
调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有俩个元素的元组,形如(connection,address)。第一个元素(connection)是新的socket对象,服务器通过它与客户通信;第二个元素(address)是客户的internet地址。

第5步是处理阶段

服务器和客户通过send和recv方法通信(传输数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接受信息。调用recv时,必须指定一个整数来控制本次调用所接受的最大数据量。recv方法在接受数据时会进入'blocket'状态,最后返回一个字符串,用它来表示收到的数据。如果发送的量超过recv所允许,数据会被截断。多余的数据将缓冲于接受端。以后调用recv时,多余的数据会从缓冲区删除。

第6步,传输结束,服务器调用socket的close方法以关闭连接。


建立一个简单客户连接则需要4个步骤。


第1步,创建一个socket以连接服务器 socket=socket.socket(family,type)

第2步,使用socket的connect方法连接服务器 socket.connect((host,port))

第3步,客户和服务器通过send和recv方法通信。

第4步,结束后,客户通过调用socket的close方法来关闭连接。

server.py
#!/usr/bin/env python
#  TCP-server
import socket
import time

HOST=''
PORT=8001
BUFSIZ=1024

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(5)
while True:
    print 'waiting for connection...'
    connection,address=sock.accept()
    print ('connection from', address)
    while True:
        try:
            data=connection.recv(BUFSIZ)
        except:
            print (e)
            connection.close()
            break
        if not data:
            break
        s='Hi,you send me : [%s] %s' % (time.ctime(),data.decode('utf8'))
        connection.send(s.encode('utf8'))
        print ([time.ctime()],':',data.decode('utf8'))
connection.close()
sock.close()

client.py
#!/usr/bin/env python
#  TCP-client
import socket
import sys

HOST='127.0.0.1'
PORT=8001
BUFSIZ=1024
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((HOST,PORT))
while True:
    data=raw_input('-->')
    if data=='quit':
        sys.exit()
    client.send('%s\r\n' % data.encode('utf8'))
    d=client.recv(BUFSIZ)
    print (d.decode('utf8'))

相关内容

热门资讯

今日重大消息“浙衢麻将究竟有挂... 网上科普关于“浙衢麻将有没有挂”话题很是火热,小编也是针对浙衢麻将作*弊开挂的方法以及开挂对应的知识...
【第一财经】“九九麻将开挂神器... 家人们!今天小编来为大家解答九九麻将透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
我来教教您“天天福建麻将开挂神... 有 亲,根据资深记者爆料天天福建麻将是可以开挂的,确实有挂(咨询软件无需...
我来教教您“网易棋牌开挂神器?... 我来教教您“网易棋牌开挂神器?”(太坑了原来有挂)您好,网易棋牌这个游戏其实有挂的,确实是有挂的,需...
玩家分享攻略“天天爱泰州麻将可... 有 亲,根据资深记者爆料天天爱泰州麻将是可以开挂的,确实有挂(咨询软件无...
【第一资讯】“成就联盟真的有挂... 家人们!今天小编来为大家解答成就联盟透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买很...
今日重大通报“欢聚斗地主是不是... 今日重大通报“欢聚斗地主是不是有挂?”(确实真的有挂)您好,欢聚斗地主这个游戏其实有挂的,确实是有挂...
【第一资讯】“新九天牛牛是不是... 网上科普关于“新九天牛牛有没有挂”话题很是火热,小编也是针对新九天牛牛作*弊开挂的方法以及开挂对应的...
今日重大消息“腾讯掼蛋怎么装挂... 今日重大消息“腾讯掼蛋怎么装挂?”(太坑了原来有挂)您好,腾讯掼蛋这个游戏其实有挂的,确实是有挂的,...
女子购近万元LV运动鞋穿后双脚... 澎湃新闻记者 陈雷柱 实习生 林霄近日,来自上海的徐女士向澎湃公众互动平台“服务湃”反映称,她于今年...