TCP socket 编程原理 及 使用 socket 发送HTTP请求

TCP socket 编程原理 及 使用 socket 发送HTTP请求1.TCPsocket编程原理?了解TCPsocket编程原理如何使用socket模块如何建立TCPsocket客户端和服务端客户端和服务端之间的通信socket建立连接的过程?服务器建立监听,socket,bind,listen客户端发送请求,connect,send连接确认,accept,response首先在服务器端建立…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1.TCP socket 编程原理?

  了解TCP socket 编程原理

如何使用 socket 模块

如何建立TCP socket 客户端和服务端

客户端和服务端之间的通信

TCP socket 编程原理 及 使用 socket 发送HTTP请求

      socket建立连接的过程?

服务器建立监听,socket,bind,listen

客户端发送请求,connect,send

连接确认,accept,response

首先在服务器端建立监听;然后客户端发起连接,同时发送数据( request );服务器端收到连接请求之后accept接受建立连接,同时对发送过来的请求做出响应( response)。

 

  编写代码与网络交互的时候都需要把参数变成字节,处理的时候都需要转换成Unicode(py3为str)

# 客户端
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

# 服务端
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()) + '\r\n'  # 返回当前的时间戳
    # 发送数据
    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是基于文本的协议

import socket

s = socket.socket()
# 连接到百度的主机
s.connect(('www.baidu.com', 80))

# 发送HTTP请求体
http = b"GET / HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n"
s.sendall(http)

# 接收响应内容
buf = s.recv(1024)
print(buf)
# 关闭socket
s.close()

输出内容:

b'HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nCache-Control: no-cache\r\nConnection: Ke
ep-Alive\r\nContent-Length: 14615\r\nContent-Type: text/html\r\nDate: Sun, 04 Aug 2019
 06:08:46 GMT\r\nEtag: "5d425abe-3917"\r\nLast-Modified: Thu, 01 Aug 2019 03:21:34 GMT
\r\nP3p: CP=" OTI DSP COR IVA OUR IND COM "\r\nPragma: no-cache\r\nServer: BWS/1.1\r\n
Set-Cookie: BAIDUID=1C5065F6AE20BE1FF3DB28EA36CDDF9F:FG=1; expires=Thu, 31-Dec-37 23:5
5:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\nSet-Cookie: BIDUPSID=1C5065
F6AE20BE1FF3DB28EA36CDDF9F; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; p
ath=/; domain=.baidu.com\r\nSet-Cookie: PSTM=1564898926; expires=Thu, 31-Dec-37 23:55:
55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\nVary: Accept-Encoding\r\nX-Ua
-Compatible: IE=Edge,chrome=1\r\n\r\n<!DOCTYPE html><!--STATUS OK-->\r\n<html>\r\n<hea
d>\r\n\t<meta http-equiv="content-type" content="text/html;charset=utf-8">\r\n\t<meta
http-equiv="X-UA-Compatible" content="IE=Edge">\r\n\t<link rel="dns-prefetch" href="//
s1.bdstatic.com"/>\r\n\t<link rel="dns-prefetc'

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180702.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • XGBoost简介

    XGBoost简介本文据此对XGBoost的原理做简单的介绍…XGBoost[1]是2014年2月诞生的专注于梯度提升算法的机器学习函数库,此函数库因其优良的学习效果以及高效的训练速度而获得广泛的关注。仅在2015年,在Kaggle[2]竞赛中获胜的29个算法中,有17个使用了XGBoost库,而作为对比,近年大热的深度神经网络方法,这一数据则是11个。在KDDCup2015[3]竞赛中,排

  • JS跳转代码_js中跳转页面路径

    JS跳转代码_js中跳转页面路径一、常规的JS页面跳转代码1、在原来的窗体中直接跳转用2、在新窗体中打开页面用:3、JS页面跳转参数的注解参数解释:第2种:第3种:第4种:第5种:三、页面停留指定时间再跳转(如3秒)四、根据访客来源跳转的JS代码1、JS判断来路代码此段代码主要用于百度谷歌点击进入跳转,直接打开网站不跳转:2、JS直接跳转代码3、ASP跳转代码判断来路<%  ifinstr(Request.ServerVariables(“http_referer”),“www

  • QCustomPlot开发笔记(一):QCustomPlot简介、下载以及基础绘图[通俗易懂]

    QCustomPlot开发笔记(一):QCustomPlot简介、下载以及基础绘图[通俗易懂]QCustomPlot开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,过目并整理了原有文档,本系列旨在系统解说并逐步更新其各种Demo示例。

    2022年10月10日
  • python 正则 括号_js正则匹配0个或多个空格

    python 正则 括号_js正则匹配0个或多个空格\d匹配一个数字\w匹配一个字母或数字.匹配任意字符*表示任意个字符(包括0个),+表示至少一个字符?表示0个或1个字符^表示行的开头$表示行的结束\s匹配一个空格(也包括Tab等空白符)\s+表示至少有一个空格|A|B可以匹配A或B,所以(P|p)ython可以匹配’Pyth…

  • setscale方法的用法_BigDecimal的setScale()方法无效

    setscale方法的用法_BigDecimal的setScale()方法无效最近在使用BigDecimal进行四舍五入时,发现setScale()方法设置的精度值并没有起作用,一度让我怀疑起是否jdk有bug,代码如下:错误代码doubled=7.199999999999999;BigDecimaldecimal=newBigDecimal(String.valueOf(d));decimal.setScale(2,BigDecimal.ROUND_HAL…

    2022年10月20日
  • 布隆过滤器原理简介视频_布隆过滤器误判怎么办

    布隆过滤器原理简介视频_布隆过滤器误判怎么办目录1.布隆过滤器简介2.布隆过滤器的实现思路3.布隆过滤器的公式4.实际应用场景1.布隆过滤器简介布隆过滤器(BloomFilter)是由一个很长的bit数组和一系列哈希函数组成的。本质上是一种数据结构,比较巧妙的概率型数据结构。它的特点是高效地插入和查询,并且根据查询结果可以知道某样东西一定不存在或者可能存在。相比于传统的List、Set、Map等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的,同时布隆过滤器还有一个缺陷就是数据只..

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号