Socket编程学习笔记
2017-05-27 15:09 核桃不是桃 阅读(384) 评论(0) 收藏 举报什么是TCP/IP、UDP?
TCP/IP(Transmission Control Protocol/Internet Protocol)也就是传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网WANs设计的。
UDP(User Data Protocol, 用户数据报协议)是与TCP相对应的协议。是与TCP相对应的协议。属于TCP/IP协议族中的一种。其关系如下图所示:

TCP/IP协议族包含运输层、网络层、链路层。
Socket在哪里?
一图胜千言:

Socket是什么呢?
Socket是应用层和TCP/IP协议族通信的中间软件抽象层,扮演一个中间人的角色。
简单说,它是一组接口,在设计模式种,Socket其实就是一个门面模式,将复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合制定的协议。
Socket就是为了方便搞网络编程的。但凡搞网络编程,就少不了和Socket打交道,因此了解Socket编程的工作原理,就显得很有必要。

如上图所示,服务器端先初始化Socket,然后与端口绑定(bind()),对端口进行监听(listen()),调用accept()方法阻塞,等待客户端连接。
此时,如果有一个客户端初始化一个Socket,然后通过connect()方法连接到服务器,如果连接成功,就建立了一个连接。服务器端接受并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
在python中,用Socket创建一个TCP服务器,需要使用socket()函数。代码如下图所示:
#_*_coding:utf-8_*_ __author__ = 'hetao' __date__ = '2017/5/27 14:44' from socket import * HOST = '' PORT = 21567 ADDR = (HOST, PORT) BUFSIZ = 1024 tcp_server = socket(AF_INET, SOCK_STREAM) tcp_server.bind(ADDR) tcp_server.listen(5) while True: print 'waiting for connection' tcp_client, addr = tcp_server.accept() print '...connected from:', addr while True: data = tcp_client.recv(BUFSIZ) if not data: break tcp_client.send('im server,hello client!') tcp_client.close() tcp_server.close()
然后我写了一个简单的客户端程序:
#_*_coding:utf-8_*_ __author__ = 'hetao' __date__ = '2017/5/27 14:54' from socket import * HOST = 'localhost' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) tcp_client = socket(AF_INET, SOCK_STREAM) tcp_client.connect(ADDR) while True: data = raw_input('>') if not data: break tcp_client.send(data) data = tcp_client.recv(BUFSIZ) if not data: break print data tcp_client.close()
运行后测试通过,发现正如上图所示。
浙公网安备 33010602011771号