python中socket怎么用_python中Socket的使用

说明

前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能。现在,将python中Socket

通信的基本实现过程做一个记录备份.

Socket通信

python 中的socket通信较为简单,仅需要几行代码就可实现。和一般的网络通信一样,通信方式分为udp和tcp两种方式,两种方式的处理也略有不同。tcp通信为传输控制协议(Transmission control Protocol),是一种面向连接、可靠的、基于字节流的传输层通信协议(TCP/IP协议簇划分的通信协议的其中一层);udp通信为用户数据报协议(User Datagram Protocol),是一种面向无连接、不可靠的、基于报文的传输层通信协议。就是TCP/IP中的两种传输层通信协议,有关TCP/IP和TCP、UDP的详细介绍视情况而定看是否需要单独介绍,由于内容涉及较广,个人并不能完全完整详细的介绍仔细。

python网络通信需要导入一个socket模块来支持通信过程。socket通信分为客户端和服务端。服务端负责监听当前设备接口的信息发送情况,客户端实现通过ip和接口向目的主机发送信息的功能。接下来,主要看python中的tcp、udp的通信方法.

1) tcp

服务端代码如下:

import socket

#socket.AF_INET:ipv4,socket.SOCK_STREAM:tcp

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

server_socket.bind((target,port))

server_socket.listen(5)

while True:

client_socket,addr=server_socket.accept()

client_handler=threading.Thread(target=handler_socket,args=(client_socket,addr,mode))

client_handler.start()

def handler_socket(client_socket,addr,mode="tcp"):

response=""

content=""

print "Accepted tcp connection from:%s:%d" % (addr[0],addr[1])

while True:

response=client_socket.recv(2048)

content+=response

while len(response)<2048:

print "content:%s" % content

response=""

content=""

a=raw_input("send to:")

if len(a):

client_socket.send(a)

客户端代码:

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

client.connect((target,port))

a=raw_input("input your text what you want to send:")

if len(a):

client.send(a)

while True:

buffer=""

response=""

a=""

while "\n" not in response:

response=client.recv(2048)

buffer+=response

print "Received buffer:%s" % buffer

a=raw_input("send to server:")

if len(a):

client.send(a)

2) udp

服务段代码:

#socket.AF_INET:ipv4,socket.SOCK_STREAM:udp

sever_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

server_socket.bind((target,port))

server_socket.listen(5)

while True:

client_socket,addr=server_socket.accept()

client_handler=threading.Thread(target=handler_socket,args=(client_socket,addr,mode))

client_handler.start()

pass

def handler_socket(client_socket,addr,mode="tcp"):

response=""

content=""

print "Accepted udp connection from:%s:%d" % (addr[0],addr[1])

while True:

response=client_socket.recvfrom(2048)

content+=response

while len(response) <2048:

print "content:%s" % content

response=""

content=""

a=raw_input("send to:")

if len(a):

client_socket.sendto(a,addr)

客户端代码

client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

a=raw_input("input your text what you want to send:")

if len(a):

client.sendto(a,(target,port))

while True:

buffer=""

response=""

a=""

while "" in response:

response,addr=client.recvfrom(4096)

print "Received buffer:%s" % buffer

a=raw_input("send to server:")

if len(a):

client.send(a)

如上为基本的实现tcp/udp实现socket同学的基础用法,我写了一个可选tcp/udp socket通信的的实例代码在github,源码地址为:socket通信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值