Python3中,建立一个socket客户端向服务端发送json数据是报 unknown url type,为啥呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3中,建立一个socket客户端向服务端发送json数据是报 unknown url type,为啥呢?相关的知识,希望对你有一定的参考价值。
源码如下:
import urllib.request
import json
import socket
send = socket.socket()
ip_port=("127.0.0.1",8080)
send.connect(ip_port)
data =
"a":123,
"b":456
values = urllib.parse.urlencode(data).encode(encoding='UTF8')
headers = 'Content-Type': 'application/json'
print(data)
print(values)
print(json.dumps(data))
print(json.dumps(data).encode())
request = urllib.request.Request(url=ip_port, headers=headers, data=json.dumps(data).encode())
response = urllib.request.urlopen(request)
执行时报错:ValueError: unknown url type: "('127.0.0.1', 8080)"
这个情况如何处理呢
import socket
HOST = \'127.0.0.1\' # 服务器的主机名或者 IP 地址
PORT = 65432 # 服务器使用的端口
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b\'Hello, world\')
data = s.recv(1024)
print(\'Received\', repr(data))
服务端写法
import socket
HOST = \'127.0.0.1\' # 标准的回环地址 (localhost)
PORT = 65432 # 监听的端口 (非系统级的端口: 大于 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(\'Connected by\', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data) 参考技术A 换一个写法试一下,把ipport去掉,connect(("127.0.0.1",8080))
报错显示是值不对,他需要的是个元组,而你给的貌似是一个字符串
应用层中SOCKET的使用
TCP和UDP是基本通讯组件SOCKET,TCP的连接流程情况如下文。建立简单的TCP客户端和服务端比较简单,但是当有数以百计的TCP客户端连接的时候处理难度难度则增加,解决方法如下文。
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手
以上部分来源于
Samaritans http://www.cnblogs.com/dolphinX/p/3460545.html
高性能的TCP服务实现(c#)
TCP服务端的性能好坏决定了后期通讯框架的稳定,若没弄好后期项目中的bug分析比较棘手。
大侠 匠心十年 发布了篇关于此内容的文章。http://www.cnblogs.com/gaochundong/p/csharp_tcp_service_models.html
后期学习透彻后将更新此内容。这里直接上一项目中使用过的TCP服务源码
以上是关于Python3中,建立一个socket客户端向服务端发送json数据是报 unknown url type,为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章