1)网络中进程间如何通信
123 | 网络中的进程间如何通信?我们首要解决的就是如何 "唯一标识一个进程" .在本地,可以采用pid标识进程,但是在网络中是不可以的. TCP /IP 协议族给我们给出了答案:网络中的ip地址可以唯一标识网络中的主机,传输层的 "协议+端口" 可以唯一标识主机中的应用程序(进程). |
2)什么是socket?
12345 | socket起源于UNIX,而UNIX一切皆文件. socket是一种特殊的文件,可以使用 "open—write/read—close" 操作. 当应用程序创建一个套接字时,操作系统就会返回一个小整数作为 "描述符" 标识这个套接字.应用程序以该描述符作为传递参数,通过调用函数来完成某种操作 (例如通过网络传送数据或接收输入的数据) |
3)TCP/IP、HTTP、socket
12345 | socket是对TCP /IP 协议的封装和应用(程序员层面上),通过socket我们才可以使用tcp、ip协议 TPC /IP 协议是传输层协议,主要解决数据如何在网络中传输 HTTP是应用层协议,主要解决如何包装数据;如果没有应用层,那么数据就不能被识别. CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力 |
4)简单的socket服务端、客户端模型
12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | ***服务端*** #!/usr/bin/env python #coding:utf -8 import socket #创建套接字:用于监听(listen)和接收(accept)客户端的连接请求;AF_INET:IPV 4 SOCK_STREAM:TCP套接字 SOCK_DGRAM:UDP套接字 sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #绑定套接字 sock.bind(( '10.59.2.132' , 8080 )) #监听客户端连接数 sock.listen( 5 ) while True: #接收并返回(conn,address),conn为新的套接字对象,用来和客户端发送数据;address是客户端的地址. conn,address = sock.accept() conn.sendall( '欢迎致电10086,请输入1想学习,0转人工服务.' ) Flag = True while Flag: data = conn.recv( 1024 ) if data == 'exit' : flag = false elif data == "0" : conn.sendall( '通过可能会被录音...' ) else: conn.sendall( '请重新输入...' ) conn.close() ***客户端*** #!/usr/bin/env python import socket ip_port = ( '10.59.2.132' , 8080 ) sk = socket.socket() sk.connect(ip_port) #超时时间 sk.settimeout( 5 ) while True: data = sk.recv( 1024 ) print 'receive:' ,data inp = raw_input( 'please input:' ) sk.sendall(inp) if inp == "exit" : break sk.close() |