IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Socket编程学习-基础操作 -> 正文阅读

[网络协议]Socket编程学习-基础操作

Socket编程学习-基础操作

socket的基本操作

可参考,https://blog.csdn.net/sinat_36645384/article/details/79128137

核心问题1-UDP与TCP的区别

1、TCP是基于连接的基础上,而UDP是不需要的。这就导致了,TCP一般用recv获取数据,而UDP用recvfrom获取数据和地址。因为TCP是基于连接的基础上,所以获取地址就是多此一举了。

创建socket

try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as msg:
    print('Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1])
    sys.exit()

注意,这里的socket.SOCK_STREAM指的是TCP。UDP用SOCK_DGRAM

连接指定ip

import socket   #for sockets
import sys  #for exit

try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as msg:
    print('Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1])
    sys.exit();

print('Socket Created')

host = 'www.oschina.net'
port = 80

try:
    remote_ip = socket.gethostbyname( host )

except socket.gaierror:
    #could not resolve
    print('Hostname could not be resolved. Exiting')
    sys.exit()

print('Ip address of ' + host + ' is ' + remote_ip)

#Connect to remote server
s.connect((remote_ip , port))

print('Socket Connected to ' + host + ' on ip ' + remote_ip)

Socket Created
Ip address of www.oschina.net is 180.97.125.228
Socket Connected to www.oschina.net on ip 180.97.125.228

发送数据

#Send some data to remote server
message = "GET / HTTP/1.1\r\n\r\n"

try :
    #Set the whole string
    s.sendall(message)
except socket.error:
    #Send failed
    print('Send failed')
    sys.exit()

print('Message send successfully')

报错:

s.sendall(message)

TypeError: a bytes-like object is required, not ‘str’

socket.socket def sendall(self,
data: bytes,
flags: int = …) -> None
< Python 3.7 (pythonProject) (2) >

于是:

message = "GET / HTTP/1.1\r\n\r\n".encode()

接受数据

#Now receive data
reply = s.recv(4096)

print reply

Socket Created
Ip address of www.oschina.net is 180.97.125.228
Socket Connected to www.oschina.net on ip 180.97.125.228
Message send successfully
b’HTTP/1.1 400 Bad Request\r\nServer: stgw/1.3.12_1.13.5\r\nDate: Sun, 23 Jan 2022 13:31:23 GMT\r\nContent-Type: text/html\r\nContent-Length: 179\r\nConnection: close\r\n\r\n\r\n400 Bad Request\r\n\r\n

400 Bad Request

\r\n
stgw/1.3.12_1.13.5
\r\n\r\n\r\n’

因为 reply: bytes = s.recv(4096)

于是:

reply = s.recv(4096).decode()

Socket Created
Ip address of www.oschina.net is 180.97.125.228
Socket Connected to www.oschina.net on ip 180.97.125.228
Message send successfully
HTTP/1.1 400 Bad Request
Server: stgw/1.3.12_1.13.5
Date: Sun, 23 Jan 2022 13:32:35 GMT
Content-Type: text/html
Content-Length: 179
Connection: close

400 Bad Request

400 Bad Request


stgw/1.3.12_1.13.5

关闭socket

s.close()
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:18:35  更:2022-01-24 11:18:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 9:20:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码