Before code implementation , Let's start with a brief introduction TCP,UDP,Socket And so on .
First of all, understand socket( Socket ), We can go through " Socket " Send a request to the network or answer a network request , To enable communication between hosts or processes on a computer .
In addition, in the communication , We use it a lot TCP and UDP,TCP,UDP Connections belonging to the transport layer , The difference between them is TCP It's link oriented , His connection requires three handshakes ; and UDP No connection is established with the other party before data transmission . So generally speaking TCP Than UDP Security , however UDP Than TCP real time .
HTTP Protocols belonging to the application layer , Only the connection transmits data , But without a protocol, we don't know what the transmission is , So we need an application layer HTTP agreement ( Hypertext Transfer Protocol Hypertext Transfer Protocol ).TCP It's the underlying communication protocol , It defines the specification of data transmission and connection mode ;HTTP It's the application layer protocol , What is defined is the specification of the content of the transmitted data ;
We have a connection , You also need an external interface , This is what this article will introduce Socket Socket .Sockert The programming interface is to make it easier for us to use the protocol stack .
Specific introduction can refer to :
TCP and UDP The difference and HTTP agreement
https://segmentfault.com/a/1190000014044351
Socket Connect with HTTP Connect
https://cloud.tencent.com/developer/article/1124905
Let's use python Of Socket Programming , Simple implementation of a client to send requests , After receiving the request, the server returns a json An example of .
The library you need is
import socket
What the server mainly does
among recv and send yes bytes type , So if it's a string or json Format needs to be down converted . Because the project uses json Format , So this article also received str, return json Write examples in the form of .
The detailed code of the server is as follows :
import json import socket HOST = '127.0.0.1' PORT = 8000 ADDR = (HOST,PORT) def start_server(): # Create socket :AF_INET-- Use ipv4 Address family SOCK_STREAM-- Use streaming sockets svr_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) svr_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # binding host:port svr_socket.bind(ADDR) # setblocking 0-- Non-blocking mode ,1-- Blocking mode The default is 1 svr_socket.setblocking(1) # Start listening TCP Incoming connections svr_socket.listen(5) # Return the new socket and client address client_socket, addr = svr_socket.accept() client_socket.settimeout(20.0) # receive data , Here, the data length is received first ( You need to negotiate the sending format with the client , Whether it is len+data In the form of ), You don't have to do this data_len = client_socket.recv(4) length = int.from_bytes(data_len, byteorder="big") # Specific data received , You can also set a larger buffer here data = client_socket.recv(length) print("rev client data", data) # Data returned to the client , Set to a json json_msg ={"key":"id","val": 123} str_msg = json.dumps(json_msg) # The string should be converted to bytes transmission client_socket.sendall(str_msg.encode()) # Close socket client_socket.close() if __name__ == '__main__': start_server()
What the server mainly does
Complete code :
import json import socket HOST = '127.0.0.1' PORT = 8000 ADDR = (HOST,PORT) def start_client(): # Create socket _socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) _socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # open tcp Connect _socket.connect(ADDR) msg = "msg from client" length = len(msg) buf = length.to_bytes(4, byteorder="big") # Send request data len+data Format _socket.sendall(buf + msg.encode()) # The receiving server returns data data = _socket.recv(1024) msg = json.loads(data) print("client get json", msg) # Close socket _socket.close() if __name__ == '__main__': start_client()