1.TCP socket 编程原理?
了解TCP socket 编程原理
如何使用 socket 模块
如何建立TCP socket 客户端和服务端
客户端和服务端之间的通信
socket建立连接的过程?
服务器建立监听,socket,bind,listen
客户端发送请求,connect,send
连接确认,accept,response
首先在服务器端建立监听;然后客户端发起连接,同时发送数据( request );服务器端收到连接请求之后accept接受建立连接,同时对发送过来的请求做出响应( response)。
编写代码与网络交互的时候都需要把参数变成字节,处理的时候都需要转换成Unicode(py3为str)
代码语言:javascript复制# 客户端
import socket
# 创建socket对象,AF_INET是IPV4,SOCK_STREAM是TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 第一个参数协议族,第二个参数是类型,TCP还是UDP
# 连接服务端
s.connect(("127.0.0.1", 6666)) # 参数是一个tuple对象
# 接收数据
data = s.recv(1024) # 1024字节数
print(data.decode())
# 关闭客户端
s.close()
客户端输出结果:
Sun Aug 4 13:47:46 2019
代码语言:javascript复制# 服务端
import socket
import time
# 创建socket对象
s = socket.socket()
# 绑定端口
s.bind(("127.0.0.1", 6666)) # 参数是一个tuple对象
# 监听
s.listen()
while True:
client, addr = s.accept() # return conn, addr
print(client)
timestr = time.ctime(time.time()) 'rn' # 返回当前的时间戳
# 发送数据
client.send(timestr.encode()) # py3,需要把send 里面参数encode('utf8')成字节
# 关闭socket
client.close()
服务端输出结果:
<socket.socket fd=536, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, prot
o=0, laddr=(‘127.0.0.1’, 6666), raddr=(‘127.0.0.1’, 1596)>
2.使用 socket 发送HTTP请求
如何使用 socket 发送HTTP请求
使用 socket 接口发送 HTTP请求
HTTP建立在TCP基础之上的一个应用层协议
HTTP是基于文本的协议
代码语言:javascript复制import socket
s = socket.socket()
# 连接到百度的主机
s.connect(('www.baidu.com', 80))
# 发送HTTP请求体
http = b"GET / HTTP/1.1rnHost: www.baidu.comrnrn"
s.sendall(http)
# 接收响应内容
buf = s.recv(1024)
print(buf)
# 关闭socket
s.close()
输出内容:
代码语言:javascript复制b'HTTP/1.1 200 OKrnAccept-Ranges: bytesrnCache-Control: no-cachernConnection: Ke
ep-AlivernContent-Length: 14615rnContent-Type: text/htmlrnDate: Sun, 04 Aug 2019
06:08:46 GMTrnEtag: "5d425abe-3917"rnLast-Modified: Thu, 01 Aug 2019 03:21:34 GMT
rnP3p: CP=" OTI DSP COR IVA OUR IND COM "rnPragma: no-cachernServer: BWS/1.1rn
Set-Cookie: BAIDUID=1C5065F6AE20BE1FF3DB28EA36CDDF9F:FG=1; expires=Thu, 31-Dec-37 23:5
5:55 GMT; max-age=2147483647; path=/; domain=.baidu.comrnSet-Cookie: BIDUPSID=1C5065
F6AE20BE1FF3DB28EA36CDDF9F; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; p
ath=/; domain=.baidu.comrnSet-Cookie: PSTM=1564898926; expires=Thu, 31-Dec-37 23:55:
55 GMT; max-age=2147483647; path=/; domain=.baidu.comrnVary: Accept-EncodingrnX-Ua
-Compatible: IE=Edge,chrome=1rnrn<!DOCTYPE html><!--STATUS OK-->rn<html>rn<hea
d>rnt<meta http-equiv="content-type" content="text/html;charset=utf-8">rnt<meta
http-equiv="X-UA-Compatible" content="IE=Edge">rnt<link rel="dns-prefetch" href="//
s1.bdstatic.com"/>rnt<link rel="dns-prefetc'
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180702.html原文链接:https://javaforall.cn