Python 3 Socket Programming one client/server architecture
The internet is the C/s architecture everywhere
1, c/s structure, that is, client/server (client/server) structure
2, in the Internet everywhere visible c/s architecture such as browser, online video, a variety of social software.
The relationship between C/s architecture and socket:
We learn sockets for the development of C/s architecture
To learn the socket must first learn the Internet protocol:
1. How to develop a C/s architecture software based on socket programming
2. c/S architecture software (software belongs to the application layer) is a network-based communication
3, the core of the network is a stack of protocols, protocol is the standard, you want to develop a network-based communication software, you must follow these standards
You can read some knowledge of network protocols.
Http://www.cnblogs.com/linhaifeng/articles/5937962.html
Second,
Scoket
and network Protocols
A socket is an intermediate software abstraction layer that the application layer communicates with the TCP/IP protocol family, which is a set of interfaces. In design mode, the socket is actually a façade mode, it is the complex TCP/IP protocol family hidden behind the socket interface, for the user, a set of simple interface is all, let the socket to organize data to meet the specified protocol.
So, we do not need to understand the TCP/UDP protocol, the socket has been packaged for us, we only need to follow the socket rules to program, write the program is naturally follow the TCP/UDP standard.
Third, socket
Sockets originated in the the 1970s UC Berkeley version of Unix, which is what people call BSD Unix. Therefore, sometimes people also refer to sockets as "Berkeley sockets" or "BSD sockets". Initially, sockets are designed to be used for communication between multiple applications on the same host. This is also called interprocess communication, or IPC. There are two types of sockets (or two races), which are file-based and network-based.
Socket family based on file type
Socket family name: Af_unix
Unix all files, file-based sockets are called by the underlying file system to fetch data, two sockets process running on the same machine, you can access the same file system to complete the communication indirectly
Socket family based on network type
Socket family name: af_inet
There are also af_inet6 used for IPv6, and some other address families, but they are either only used on a platform, or have been discarded, or are rarely used, or are not implemented at all, in all address families, Af_inet is the most widely used one, Python supports a variety of address families, but since we only care about network programming, most of the time I only use af_inet
Iv. Socket Usage:
First you need to import the socket module (you need to import a module using any function)
socket () moduleImportSocketsocket.socket (socket_family,socket_type,protocal=0) socket_family can be Af_unix or af_inet. Socket_type can be sock_stream or sock_dgram. Protocol is generally not filled, the default value is 0. Get TCP/IP Socket tcpsock=Socket.socket (socket.af_inet, socket. SOCK_STREAM) Get UDP/IP Socket udpsock=Socket.socket (socket.af_inet, socket. SOCK_DGRAM) Because there are too many properties in the socket module. We made an exceptional use of it here.'From module Import *'Statement. Use'From socket Import *', we took all the attributes from the socket module into our namespace, which greatly shortened our code. such as Tcpsock= Socket (af_inet, SOCK_STREAM)
socket () module
Service-Side socket functions
S.bind () bind (host, port number) to Socket S.listen () Start TCP Listener s.accept () passively accept TCP Client connection, (blocked) wait for connection arrival
Client socket functions
S.connect () actively initializes an extended version of the TCP server Connection S.CONNECT_EX () connect () function, returning an error code instead of throwing an exception when an error occurs
Socket functions for public use
S.RECV () receives TCP data S.send () sends TCP data (send data is lost when the amount of data to be sent is greater than the remaining space in the buffer cache) S.sendall () sends the full TCP data ( The essence is circular call Send,sendall in the amount of data to be sent is greater than the left buffer space, the data is not lost, loop call send until the end of the Send) S.recvfrom () receive UDP data s.sendto () Send UDP data S.getpeername () to the remote address of the current socket S.getsockname () The address of the current socket s.getsockopt () returns the parameters of the specified socket s.setsockopt () Set the parameter of the specified socket S.close () close socket
Lock-oriented socket method
S.setblocking () sets the blocking and non-blocking mode of sockets S.settimeout () to set the timeout time for blocking socket operations S.gettimeout () to get the timeout for blocking socket operations
Functions for file-oriented sockets
S.fileno () The file descriptor for the socket () s.makefile () creates a file associated with the socket
TCP-based sockets
TCP is link-based, you must start the server, and then start the client to link the server-side SS= Socket ()#Create a server socketSs.bind ()#bind an address to a socketSs.listen ()#Monitoring LinksInf_loop:#Server Infinite loopCS= Ss.accept ()#Accept Client LinksComm_loop:#Communication Cyclecs.recv ()/cs.send ()#dialog (receive and send)cs.close ()#close the client socketss.close ()#to turn off server sockets (optional)
TCP Client
CS = socket () # Create client socket cs.connect ( )# try to connect to server Comm_loop: # Communication Cycle cs.send ()/cs.recv () # Dialog (send/Receive)cs.close () # Close Client sockets
The socket communication process is similar to the call process, so we use the phone as an example to implement a low version of socket communication
ImportSocketip_port=('127.0.0.1', 8080)#Calling cardBUFSIZE=1024#size of sending and receiving messagess=socket.socket (Socket.af_inet,socket. SOCK_STREAM)#buy a cell phoneS.bind (Ip_port)#Mobile Phone CardS.listen (5)#Phone Standbyconn,addr=s.accept ()#Phone Answering phone#PRINT (conn)#print (addr)Print('receive a call from%s'%addr[0]) msg=CONN.RECV (BUFSIZE)#listen to the news, obey.Print(Msg,type (msg)) Conn.send (Msg.upper ())#send a message, speakconn.close ()#Hang up the phones.close ()#Mobile phone off
Service Side
ImportSocketphone=socket.socket (Socket.af_inet,socket. SOCK_STREAM)#buy a cell phonePhone.connect (('127.0.0.1', 8080))#Binding Mobile Card #send and receive messagesPhone.send ('Hello'. Encode ('Utf-8')) Data=PHONE.RECV (1024)Print('Server Back res:<%s>'%data) Phone.close ()
Client
Plus link loops and communication loops
ImportSocketphone=Socket.socket (Socket.af_inet,socket. SOCK_STREAM) phone.setsockopt (socket. Sol_socket,socket. SO_REUSEADDR,1)#That 's it, in front of BIND plusPhone.bind (('127.0.0.1', 8080)) Phone.listen (5)Print('Server start===') whileTrue:#Link Loopsconn,client_addr=phone.accept ()Print(CONN,CLIENT_ADDR) whileTrue:#Communication Cycle Try: Client_data=CONN.RECV (1024) if notClient_data: Break #for Linux Systems #print (' has Rev ')Conn.send (Client_data.upper ())exceptException:#for Windwos Breakconn.close () phone.close ( )
plus link loop service side
Client (can have several clients linked together after the previous one is suspended and immediately linked)
ImportSocketphone=Socket.socket (Socket.af_inet,socket. Sock_stream) Phone.connect (('127.0.0.1', 8080))#send and receive messages whiletrue:msg=input ('>>:'). Strip ()if notMsgContinuephone.send (Msg.encode ('Utf-8')) Server_data=PHONE.RECV (1024) Print(Server_data.decode ('Utf-8') ) Phone.close ()
plus link -by-client:
Python 3 Socket Programming