客户端和服务端的网络编程
在服务器相应客户端的请求之前,必须进行一些初步的设置流程来为之后的的工作做准备。首先会创建一个通信端点,他能够使服务器监听请求。可以把服务器比作公司主线呼叫的总机接线员,一旦设备安装成功且接线员到达时,服务就可以开始了。
套接字
套接字是计算机网络数据结构,他体现了“通信端点”的概念,在任何类型通信开始之前,网络运用程序必须创建套接字,就好比电话的插孔。
套接字地址:主机-端口对
如果一个套接字像一个电话插孔 —— 允许通信的一些基本设施,那么主机名和端口号就像区号和电话号码的组合。
一个网络地址是由主机名和端口号组成的,也是网络通信所需要的。有效的端口号范围在0 ~65535
1.面向链接的套接字 TCP
面向连接的通信提供序列化的,可靠和不重复的数据交付,而没有记录边界。这基本意味着每条信息都可以拆分成多个片段,并且每条信息片段都能到达目的地,然后他们将按顺序的组合在一起,最后将信息传递给运用程序。这种类型的通信也称为虚拟电路或流套接字。
2.无连接的套接字 UDP
虚拟电路形成鲜明对比是数据报类型的套接字,他是一种无连接的套接字。这意外着,在通信之前并不需要建立连接。此时,在数据传输过程中并无法保证他的顺序性,可靠性,重复性。然而,他保存了记录边界,这就意味着信息是整体发出的,而不是分成多段。
Python 中的网络编程
- 套接字对象内置方法
创建TCP服务器
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print("waiting for conneectin...")
tcpCliSock, addr = tcpSerSock.accept()
print("...connected from :",addr)
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' %(ctime(),data))
tcpCliSock.close()
tcpSerSock.close()
创建TCP客户端
from socket import*
from pip._vendor.distlib.compat import raw_input
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = raw_input('>')
if not data:
break
tcpCliSock.send(data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print(data)
tcpCliSock.close()
pass
执行: 客户端
执行 :服务器