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,为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

Python3 Socket网络编程

Python3 Socket网络编程

Python3 Socket网络编程

Socket看法

socket中TCP的三次握手建立连接&四次握手释放详解

socket连接建立步骤