码迷,mamicode.com
首页 > 编程语言 > 详细

python socket编程

时间:2018-03-10 14:00:43      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:运行   发送数据   sock   pos   print   unix   针对   快速开发   stream   

  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编程

标签:运行   发送数据   sock   pos   print   unix   针对   快速开发   stream   

原文地址:https://www.cnblogs.com/chenjie2018/p/8538615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!