一、Python服务器
由于是从通用的UNIX-SOCKET库继承发展而来,因此大致的框架仍旧和C/C++实现一样,不过好处是直接调用Python提供的模块接口,而不需要再过多考虑系统之间的差异。
点击(此处)折叠或打开
- #A Basic Server...
- import socket
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
- host = socket.gethostbyname(socket.gethostname())
- print host
- port = 9999
- s.bind((host, port))
- s.listen(5)
- print "Server is up..."
- while True:
- client, addr = s.accept()
- print "Got connection from: ", str(addr)
- client.send("Thank you for connecting...")
- client.close()
-
- raw_input("Enter for Exit...")
-2. 第四行主要是调用了socket.socket()函数,初始化一个socket类对象,这里的参数主要有三个,同C/C++中的实现版本一样,第一个参数socket.AF_INET用来表明使用IPv4协议族,socket.SOCK_STREAM表示是数据流连接,一般是TCP,若是socket.SOCK_DGRAM则是数据报类型,一般是UDP;最后一个一般是数值0,可以不写;函数返回一个实例化的socket对象;
-3. 第六行使用了socket模块的方法gethostbyname(),参数时一个hostname,返回解析之后的IP字符串,而gethostname()正好返回本接口的主机名,比如'host.com.cn'类似的形式;整个函数返回一个字符串;
-4. 第九行使用s.bind()方法将现在的套接字与地址绑定起来,所谓的Python网络地址指的是一个(IP/hostname, Port)的二元序列,这里注意端口要使用1024之后的端口;
-5. s.listen(5)用来指明最大连接等待数为5;
-6. 第十五行到第十九行利用while循环进入服务器监听阶段,使用s.accept()函数返回(客户端套接字,客户端地址)的二元序列;然后使用client.send()函数发送字符串,然后关闭通讯套接字client.close();注意这里的通讯套接字和监听套接字是两个不同的套接字;
二、Python客户端
点击(此处)折叠或打开
- #A Basic Client...
- import socket
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
- host = socket.gethostbyname(socket.gethostname())
- port = 9999
- s.connect((host, port))
- print s.recv(1024)
- raw_input("Enter for Exit...")
-2. 第六行到第七行定义要连接的目标服务器地址,这里在本机测试,因此使用了gethostname();
-3. 第九行的connect函数用来发起连接,然后使用resv()函数接收服务器信息,1024为指定的接收缓冲区,一般使用该值;
程序运行结果如下:
PS:今天讲的比较基础,异步通信,并发连接等会在后续介绍。