Python_Socket

Python Socket

socket

是通讯中的一种方式,主要用来处理客户端与伺服器端之串连,只需要protocol、IP、Port三项目即可进行网路串连。

Python套件

import socket

socket 常用函式

socket.socket([family], [type] , [proto] )
family: 串接的类型可分为 IPv4本机、IPv4网路、IPv6网路。
type: 串接可分为TCP/UDP。
protocol: 串接协定(通常预设为0)。

栏位类别名称宣告解释内容
家庭套接字.AF_UNIX于本机端进行串接
套接字.AF_INET于伺服器与伺服器之间进行串接
套接字.AF_INET6使用IPv6于伺服器与伺服器之间进行串接
类型套接字.SOCK_STREAM使用TCP(资料流)的方式提供可靠、双向、串流的通信频道
套接字.SOCK_DGRAM使用UDP()的方式通用的免连线讯息交换通道
socket变数名称 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #TCP宣告
socket变数名称 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #UDP宣告
  1. 绑定(主机,端口)
    • 用于伺服器端需监听的IP位址和Port。
    • host : IP位址
    • prot : port号
socket变数名称.bind(("127.0.0.1",8888))
  1. 听(值)
    • 用于伺服器端最多可接受多少socket串接。
    • value : 最大值
socket变数名称.listen(5)
  1. 接受()
    • 用于伺服器端接收串接,并会回传(client,address)串接对象与IP位址资讯。
client,addr = socket变数名称.accept() #client存串接对象、addr存连线资讯
  1. 连接(主机,端口)
    • 用于客户端指定要串接的IP位址跟Port号。
    • host : IP位址
    • prot : port号
socket变数名称.connect("127.0.0.1",80)

TCP_socket传接资料函式

  1. 发送(数据)
    • 可用于传送资料过去给串接对象,回传值为要送出的字数。
socket变数名称.send("hello!")
  1. recv(缓冲区大小)
    • 可用于接收资料,回传值为接收到的资料。
    • bufsize : 为宣告接收最多字数值
socket变数名称.recv(200)

UDP_socket传接资料函式

  1. 发送(数据,(地址,端口))
    • 可用于传送资料过去给串接对象,回传值为要送出的字数。
    • data : 欲传送之资料字串
    • addr : 欲传送之IP位址
    • port : 欲传送之Port号
socket变数名称.sendto("hello!",("127.0.0.1",80))
  1. recvfrom(缓冲区大小)
    • 可用于接收资料,并会回传(data,addr)接收到的资料和IP位址资讯。
    • bufsize : 为宣告接收最多字数值
data,addr = socket变数名称.recvfrom(200)
  1. 关闭()
    • 关闭socket连接

简单小实作(Python2)

  • 服务器端
import socket

bind_ip = "0.0.0.0"
bind_port = 9999

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server.bind((bind_ip,bind_port))

server.listen(5)

print "[*] Listening on %s:%d " % (bind_ip,bind_port)

while True:
    client,addr = server.accept()
    print 'Connected by ', addr

    while True:
        data = client.recv(1024)
        print "Client recv data : %s " % (data)

        client.send("ACK!")
  • 客户端.py
import socket

HOST = '0.0.0.0'
PORT = 9999

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

while True:
    cmd = raw_input("Please input msg:")
    s.send(cmd)
    data = s.recv(1024)
    print "server send : %s " % (data)

执行结果

  • 一开始server端先打开等待接收,当client端执行后会,server会显示连线的IP与port

  • 从client端输入资料传送后,server端收到资料并发送ACK!,client端可收到ACK,并等待使用者输入下一个要传送的资料

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值