python socket编程

Posted chenjie2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python socket编程相关的知识,希望对你有一定的参考价值。

  Socket源于Unix的“一切借文件”的思想,简而言之就是类似与file的:打开——读写——关闭的操作,file针对与文件进行操作,socket针对与服务器和客户端进行操作。基于网络进行通信,必然逃不开各种网络协议,为了快速开发,在应用层和传输层之间加入socket层,从而将tcp(udp)的协议进行封装,便于进行开发。

技术分享图片技术分享图片

  首先写一个简单的基于socket的网络通信

 1 # import socket
 2 from socket import *
 3 ip_port=(127.0.0.1,8080)
 4 back_log=5
 5 buffer_size=1024
 6 
 7 tcp_client=socket(AF_INET,SOCK_STREAM)
 8 tcp_client.connect(ip_port)
 9 
10 while True:
11     msg=input(>>: ).strip()
12     if not msg:continue
13     tcp_client.send(msg.encode(utf-8))
14     print(客户端已经发送消息)
15     data=tcp_client.recv(buffer_size)
16     print(收到服务端发来的消息,data.decode(utf-8))
17 
18 tcp_client.close()

# import socket
from socket import *
ip_port=(127.0.0.1,8080)
back_log=5
buffer_size=1024

tcp_server=socket(AF_INET,SOCK_STREAM)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)

while True:
    print(服务端开始运行了)
    conn,addr=tcp_server.accept() #服务端阻塞
    print(双向链接是,conn)
    print(客户端地址,addr)

    while True:
        # try:
            data=conn.recv(buffer_size)
            print(客户端发来的消息是,data.decode(utf-8))
            conn.send(data.upper())
        # except Exception:
        #     break
    conn.close()

tcp_server.close()

  服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

  socket中常用的方法有如下几个

socket.socket():建立socker套接字,两个参数,family代表家族.type代表类型,type默认TCP

socket.bind():服务器端,接受的参数是元组,不是传递host,port两个元素,而是(host,port),绑定主机,端口号到套接字

socket.listen():一个参数,值为允许客户端连接服务器的排队上线,如果超过挂起上限则会拒绝掉, 开始监听绑定的端口号

socket.accept():无参数,其返回值是一个元组,第一个是新的套接字对象,第二个是地址,被动接受tcp客户链接,阻赛式等待连接的到来

socket.connect():主动初始化tcp的服务器连接

socket.connect_ex():connect()的扩展版,出错返回错误代码,而非抛出异常

 

 

 

 



以上是关于python socket编程的主要内容,如果未能解决你的问题,请参考以下文章

Python--网络编程-----socket代码实例--聊天软件升级版

python,socket网络编程,最简单的server端和client端代码

golang代码片段(摘抄)

Python下的socket编程

Python网络编程常用代码

Python全栈开发-Day8-Socket网络编程