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()的扩展版,出错返回错误代码,而非抛出异常

 

 

 

 

posted @ 2018-03-10 11:39  cj陈杰  阅读(167)  评论(0编辑  收藏  举报