Python简单的SOCKET编程

Python是一个强大的网络编程工具。大家都知道,在网络编程中的一个基本主件就是套接字(SOCKET)。套接字到底是什么呢?可以这样说,就是两个程序之间的信息通道而已。比如两个人打电话,必须建立有线或者无线的道路来进行通信。程序可能分布在不同的计算机上,两个人也不一定时时在一起。所以程序与程序之间,要通过套接字相互发送消息。
套接字:包括两个,服务器套接字,客户端套接字。创建一个服务器套接字后,让它等待连接。然而服务器套接字要做的还有就是监听,必须指定一个IP地址和一个端口号,通俗的讲,ip地址决定将要通信的计算机,端口号是该指定通信的计算机上要通信的程序。相比来说,客户端套接字就简单多了,只是完成简单的连接工作,完成之后,便断开连接。
一个套接字就是一个Socket模块中socket类的实例,它的实例化需要三个参数:第一个参数是地址族(socket.AF_INET);第二个参数是流(socket.SOCK_STREAM)或者数据报(socket.SOCK_DGRAM);第三个参数是你将要使用的协议,默认情况0即可。服务器端套接字使用bind绑定地址和端口号,在调用listen方法去监听这个地址和端口号。客户端套接字使用connect方法连接到将要通信的IP地址。所谓地址是格式为(host,port)的元组。listen的方法有一个参数,用来指定允许排队等待的连接数目。
服务器端开始监听,便可以接受连接,次数调用accept方法,此法会进入阻塞状态,直到有客户端调用connect方法,然后该方法返回一个格式为(client,addres)的元组,client是一个客户端套接字,address是一个地址。等服务器端处理的方法结束,便调用另一个accept方法等待下一个连接。通常是在无线循环中实现的。
下面举一个例子:
服务器端:

import socket

s=socket.socket()
host=socket.gethostname()
port=1234
s.bind((host,port))
s.listen(5)
while True:
    s,addr=s.accept()
    print ("Got connect from %s:%s" % addr)
    s.send("Thank you for connecting")
    s.close()
客户端:
import socket

s=socket.socket()
host=socket.gethostname()
port=1234

s.connect((host,port))
print s.recv(1024)

套接字有两个方法:send()方法,用于发送数据,recv()方法,用于接收数据。使用字符串参数来调用send发送数据,用一个所需最大字节数作参数调用recv来接收数据。在Linux系统中需要系统管理员的权限,才能使用1024以下的端口,这些低于1024的端口用于标准服务,比如端口80用于WEB服务,当你用Ctrl+C停止了一个服务,可能要等上一段时间才能使用同一个端口号(可能会得到“地址正在使用”的错误信息)

上面的服务器端编程称为阻塞编程。更深入的话可以看看异步网络编程,其中使用了线程来同时处理多个客户机。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值