文章出自:Python socket – network programming tutorial by Silver Moon

原创译文,如有版权问题请联系删除。

Network programing in Python:

Part2: Programing sockets servers.

在所有的通信实例中,都分为Client 和Server. 其中:Client是请求的发起点,Server是使用Socket接收传入的值并且提供返回数据。

  Server的职能如下:

  1>.创建/打开一个socket

  2>.绑定IP地址(端口) (Bind IP with port)

  3>.监听请求的连接(Listen for incoming conecting)

  4>.同意连接(Accpect connecting)

  5>.读取/发送

  OK,到此,我们明白了server要做什么和怎么做(上面所描述的代码执行的顺序也是不能随意修改的)。在上一节点Part1中,我们已经掌握如何创建和打开一个socket,

接下来我们就要学习如何绑定和监听。

  Bind a socket:  

#!/usr/bin/python
import socket #for sockets
import sys #for exit HOST = '' #HOST name or IP address
PORT = 7001 #remote port s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print ('Socket created') try:
s.bind((HOST,PORT))
except socket.error as msg:
print ('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit()
print ('Socket bind complete')

  现在,利用IP地址和端口的绑定已经完成了,在绑定之前,你必须确保所有的请求方的数据能够通过这个端口被访问,接下来开始监听连接,当然不排除多个不同的程序监听同一个端口的情况。(如何处理这样的情况??!)

  Listen for incoming connections:

  成功绑定之后,要监听这个连接,方法:socket_listen用来监听,只需要在bind()成功后加上如下代码即可:  

#listen connecting
s.listen(10) #why we input 10, you can read manual about listen function
print('Socket now listening')

  Accept connection:

  方法: socket_accpect用来接收请求。  

#!/usr/bin/python
import socket #for sockets
import sys #for exit HOST = '' #HOST name or IP address
PORT = 7001 #remote port s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print ('Socket created') #bind ip/port
try:
s.bind((HOST,PORT))
except socket.error as msg:
print ('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit() print ('Socket bind complete') #listen connecting
s.listen(10)
print('Socket now listening') #wait to accept a connection - blocking call
conn, addr = s.accept() #display client information
print ('Connected with ' + addr[0] + ':' + str(addr[1]))

  结果输出:

  aaarticlea/png;base64,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" alt="" />

  现在程序已经开始等待请求数据从port 7001, 不要关闭程序,让它保持运行,我们看看会得到什么...

  Receving/send Data:  

#!/usr/bin/python
import socket #for sockets
import sys #for exit HOST = '' #HOST name or IP address
PORT = 7001 #remote port s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print ('Socket created') #bind ip/port
try:
s.bind((HOST,PORT))
except socket.error as msg:
print ('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit() print ('Socket bind complete') #listen connecting
s.listen(10)
print('Socket now listening') #wait to accept a connection - blocking call
conn, addr = s.accept() #display client information
print ('Connected with ' + addr[0] + ':' + str(addr[1])) #now keep talking with the client
data = conn.recv(1024)
print(data)
conn.sendall(data) #close and dispoiled socket
conn.close()
s.close()

  然后连接到这台server,需要注意的是如果防火墙开启,要注意设置的端口是否可以安全访问。如果答案是肯定的,你将看到:

  aaarticlea/png;base64,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" alt="" />

  现在我们已经完成了一个绑定/监听/同意请求的一个完整连接,但是你会发现,在代码执行完成并返回'Hello'后会退出,这样的设计是效率非常低下的,实际上我们的很多逻辑是在接收完成数据后才执行的。

  在现实使用的应用场景中,我们的server需要的是 Keep running non-stop, 有一种方法就是将Accpect()方法放在循环中,这样的话它将会一直接收客户端发来的请求。  

  Live Server:

  顾名思义,一直运行(监听客户端请求并同意处理请求)。  

#!/usr/bin/python
import socket #for sockets
import sys #for exit HOST = '' #HOST name or IP address
PORT = 7001 #remote port s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print ('Socket created') #bind ip/port
try:
s.bind((HOST,PORT))
except socket.error as msg:
print ('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit() print ('Socket bind complete') #listen connecting
s.listen(10)
print('Socket now listening') #simple way as server
#-------------------------------------------------------
#wait to accept a connection - blocking call
#conn, addr = s.accept() ##display client information
#print ('Connected with ' + addr[0] + ':' + str(addr[1])) ##now keep talking with the client
#data = conn.recv(1024)
#------------------------------------------------------- #liver server, always running
#-------------------------------------------------------
#now keep talking with the client
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
print ('Connected with ' + addr[0] + ':' + str(addr[1]))
data = conn.recv(1024)
#reply = 'OK...' + data
if not data:
break conn.sendall(data)
print(data)
#-------------------------------------------------------
#close and dispoiled socket
conn.close()
s.close()

  输出结果:

  server:

  aaarticlea/png;base64,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" alt="" />

  client:

  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAooAAADVCAIAAABfUUbQAAAchElEQVR4nO2dOZIcR5aG8wi8Au9BpVtsMyptxmOM0EYRRgWGI/QVqI7G0UCRo5ECzTAaKLQAAUIJFEKAkCMkKhh4y+8v9qW+sM+qMjyeL+GxfO6ZVRm3+6cOYMi733+93+9vXr959/uvD968fnO/33dvGADAy+G2ewvgaKBnAIDduT3/ug+5f+put7th97bCNqBnAIDdma7n25dLmK4jdZb+J2wMegYA2J25s2dj0HC1EqOztHcDkS8HegYA2J119VyJqWRp7wZ6Xo6N9eyPnT6a5q2a3bsLToo4eTivtmfy4VjEIMfk0Hr2b4+brSZg9968Bkvp+ZYvPlKszgkGyJhw04f1mHM4jBrCF/1q8aZ0BOa2qeja+q15mOjf6A7F3Dx4MIq1Z8/ZwRrl8rNcYLAv4gyp37hN3uHNp3n6ZbWIlPWyZ5s2u47WOBxhIf6F7hCR7istHoX5PdnXZyfK682eK1tvX+rZdJDpl0U6Anr20nNza/M0ABBk95MwrFmOj8wEEwY0z+HFsxdLPuPhGN4T/FIprdIDFfuYZsztoudCD61nkSWLgcks+Ob2qPThpkrMnaMPY1jqTl3Us0/URhyVvbJV78tB9Dz/cMyptF5LeND1IOnoeq7cPUWWUaOVBQ/hC2djPQ+HmXrkO8zeHCYD3FvzyyyLPrW0nkUtR9bzNhfReoejeFsQteiw8KD7I948IuO667mgZfQcHulmK7Msw9WswHotUGT3Pw0LU0yxlUiAe3QzMS/CeJHi70vhWZ3lnayNMO+o2kXJlSxHPhwT+rPYUc2+Wq8n5+oZrsfas+dKZJh3eCeqWB/gPv4tt1F6Ltau0ydLtFlIseRiliMfjuJtAT3DudlLz+GlpS/OUTdKeLFU5lthpMieBVcKrBdyPT0vfjh8Z/qfc/ZalLCRngF6NtBz85qp5B3KGz1DRnb3317P9SnjhOxz9LysVDY+HL5YrefiNCCrDj3DnpxFz/0qbgZBZtP6WTdKz7oWIwNviFHZwwKz7GNLPtHhMGVqPY86xFnD9FHQdY3oK7Htzes3ozpdj0T6ez1kzDyWS7GUnv1ZEZ4h/VXUjLwPLkV/V9rgzgKnI7zPFm+mmxnr5bD24chuFydlgaZ/7oLn5e3Pb9/+/Nb3y+7yOz67nw39keKRGAAA+zJ39vwQ89uf37764VU/unn1w6te0n3k7vI7PrufDf2RQs8AAPsya/bcu/nx4nYf/LzdjKGNim63m1l9LCJlvezZJvMua58Sbqo3wwegZwAAGDJr9vxw8Gc3f7n0hvZ6Dh1mXmdb18heLFl4Pas0TBG23v1s6I8UegYA2Jfps+eHg1/98Kp38+Oz59uzqR9be0PrSeo0I1ayNLNPLtmk1EcJ6BkAADTTZ89/TZrvz9Plx/eXvP6c8vh5dj2b+S56BgCADZg7e/5C0j2v/3p/+/EnY/fyZ8+ZukZJdJjYzD5q3CCah54BAGAp2rPn7Gc/M/5rrvz6+efrv2bPRT1XNDbfi2NL9unoGQAANmDW7Pnx/1R//V3Y0M3Pnz1P1rMw6EH03FQ1egYAgGnM/ccq/ZfbvZvvIz971m7eTM+jSkbPAACwFAvoOfu/5+HU+T7y/56N7LULffawwIqDKw0Tjm82Az0DAECF2d/Z/Wxo861hxs33q3xrWHNaP6fM3c+G/kihZwCAfVnsO7d7SfdiHrr5fiE9L2voYYG7nw39kZqp56eP758+vv/6uze3b76/MF99++qxp/SD7gcAmMBiT/Mwb0f7gN3Nenx2Pxv6IzVfz//84cdffnt/v/Ty7o+nf/7wo9Yz/QAA09juYVu7y+/47H429EfqPk/PX3/35u3VnfRY3v72/uvv0m/voR8AYDInfhYmrMR8Pd+++X5nXWyzfLp3XXf75nv6QfcDAEwAPYNlGT1/ul+eruu6p6eGnvdu5BH6AQAmcHv+dR9y/9R9+S2d99vtvntbYRsW0vP+O7IqXdd1fz49ffzQ0vP+Td29HwBgAtP1bP7+q1/N/kCs+bdjYhNsySJ67l7CUtDz3k3cZEHPACuwip7DmCy+GQkbg56rC3p+LOgZYAXW1XMlPVyFHTmmnt+8ftNM8elZzDLL09PTh930fLvdiomrL61+ABA0b/4VWdQTT8TR9Wze8e5fh7PtLBhGcUw9d861j1aFYcP0tQz959PTTnp+ONj8fCzDmGxZuDWFfgAQLKLne+QaYZ9s2b03vmjnUn1a0bPuBb/Jvw5ryYR9tL4+C0vq+c+nZXk0LKSPebRWxyzC09OHpw/vS3pertLb7fb4+dm1g8QsWMds0A8AQ4QdQzuY237/c4Knw9VKum9eKKwwoE9sStDW+1yQnSivPXvWB0/sngkrBkOdI+t5KGn//7fGxMOY/vU19FxUbyUGPcO+NG/UXs+hDjILehdmNdbThYnClOKe2vjnbAfVc71T5vcFPDi+nh/2fTTSbDIm7j392LSxllbSs1lMInqGExHq02813u23Tq50ZvoV9Jy91vsvihKDoErvQIVj6nn47rR+1/olvLkdqtcLGD3DkRneqMXteujme0EQfggrxCHShxWJkYHQs8+lhyO2Pc/ZRus5q2xsj/iMIlGXqYOhyDH13Hv38dq8ZT2cGfcm9jGXeXO7P9VDPYe3p+GCnuEIDMUmbtfmll50pChzTrqQ8YSURv88h07RM1ySU+g5TOlnydeePQ9l7H96l/vX6Bl2x1u2aUej88x/4ZA0LDCrqNnsseqtpAR1PYeiZ/jMwfWs/3K7ny53X34O/RL+NAw9w1nIZBZKK5s9V8IWmVX7mE31DNCzkJ6fum5hDQy9K9647sP6mXQXzby30vPC/VDXs15Fz7AXeo4bmqxo2UzMPmO2iAb7KuanNDpq90MFR2MZPa+ggeab2z6xn2136/zl9oemnpfuBH9D6Q6gZ90PAAIhKqNMoedh5FKzZ1/+GimqZ3Y/NnA0jqnn/l+k9Jvb/rNnI+kltfTxw4f/bK1nzy2fT4dhi9PsBwBB0VV98KjJ7t05/kScstGwKsfUc/c8/b3nSx9mIk36ZlraRs+7g54B1uD53QCe9wzPHFbPh+LpCT1X+wEAJjBdz9nb9Nk7D803JfzW8GMDWBv0vJSW6AcAmMwqeg5j9Ifz4epYMSPyRVhEz08fP1yeD/95/+GPd1rPuzfyCP0AABNYV8+V9HBVJKqdQc9LMF/PX3376u3//vrhj3cX5v0f797/368//fz2q29f0Q+6HwBgAifQs3/b3Gw1Abv36dmZr+enj+//8a9///jfP737/ZfL8tsvP/3PT//4r38/fXxPP+h+AIAJTJfZBD2Lz56bevbvk/Mp9Uosouenj++//u7N7ZvvL8xX37567Cn9oPsBACYw/Us9Z86edWnDxKGMh3YPhb17h16A+XoGAICZnEnPIgt6XhD0DACwO+vqWfzldqW05pvbIgUmg54BAHZnup7vyb84Zx8wN93pM1b+NMy8xtDzQc8AALszS89wSUI9AwDAlqBnsHg93z914puuWVhYWFgWX3grGCyBnllYWFhYtl3QM1jQMwsLC8vuC3oGS6rnvRsGAPByQM9gmazn5v/RVf6uvvjPeIv8rX7xK+0mFAgAMBOe9wyWCXrW/6duwu5Oh0LJzX+vzyrKFl1aWKNurV5GtQcAoGeVR2Jkt0J9V+KedRA2mD1nJ899YPfQZL4Ecbb4TZWTdtTpFzaj3khOdQDIWEXPYYy4IzdXYUvG6jnzaHFVxAyrEC8ys4rVsAFhrgpNH6NnABjLunqupIersCOZnrP/nX/kGkqufjL44+5NKTyttdqUrna8V7gYCmRV6E19+u5fgAAAR+Poeg5vl+I+nt06oY7Qc/zn/1/2vzki5miaQ+mPlz+UwxhTwj0/wXx7srqK6FNU+7up59n/gsHCwnK1ZbrGJuhZ6NOHiWL9rT9LgQk09OziQyVneh7l1LCE5gvfmLAE0x59foZFVRpQzAsAYOjvLMd6oCR63pGxeg473GvYjLq8DsPXPqbfGlbk2xOeFaGGtZWb44CwqaJkkQ4AgJ7BMmH2bMwUHpG7s2N4sDKbmozNY61Pj7B87WzRSL/jlRaKdACAdfVc96W/3zWLnXDLhgoTZs9FJw0PU0XJ4jQojgNESrMQvTti6BDmzZbdDzcAHJPper5/edPRifeCL4e5stt9WNd9cHvlrjefyW9uiyGUT8ws5bMIswod+hKEfUVrm6vZGSt2qpkOADBLz0eDm90iTHtze3gIQjMZE4uYMLiibW9KkUuM7cKShWKzZfdDCQDnBT2DZdrsGQAAFgSfgQU9AwDsDnoGi9bz7t+kAwDwEkDPYGnq+e9/+zsAAKwKegZLRc/dpzsAAKwHegYLegYA2B30DJbz6vl2u5kXfjV7PS1gx30EgGuDnsEyVs/ehY8lONvcJhHsCw+Di+r1m3ylw/QspvtyEGCWERdeVHvYfrEjIjsAnB30DJa6nkPdhq/DTZV5amipUbPh0ZdEefZcFGezFl+s7tVsTICeAa4EegbLnNlz0RBCTiYxc6GJEUszONtkEvWqr2tmD2QdIlLQM8CVQM9gWVbPozTji2rqWVfUb6rIr0sGBFle0bamrYeC17WIXiruFACcEfQMlpl61lPJ0JRFFTVLVif6GPkZ/wk9Z7Pnip6LtYT1TugBADgX6BksS82e9XRWp+gZaibXTJbhVhMZyjITZ5hl3IXX+lO1Ub03uRkAcFjQM1gOoudMnyK7iCnKLwzz0+WwkaPsOFbP4eih2asAcF7QM1hW0rMWUtOXFT2HJVdq76IBgYgcZsmq0LIcpedmsO5DADgj6Bksy/7fs5eWSGlqNdReZWZc0fyooYAeYSyo5+LoJ9txADgp6Bks5/rWsFCK3o6VWbXPKMQ5rCgbN0zekWJAZVwCACcFPYPlXHr+fB4ns2qhUqNVP4kPp6piuj9fz6KEbJNp2O4HAgCWAj2D5Yx6BgC4GOgZLCfVczijHZXRr+qPsQEA1gM9g2XLR2KEJYTB2ae83srZu9zFEvzPrLWizPaFh+MBQIKewbLZIzGGhdjzsvavRF1Nz1l6WHJ99iwyti889AwAEvQMlo0fibGGnv2MtjJd9hnrq8yeAWBZ0DNYtnwkhlGvsGlmwayoLhf20K8+i25Ms7W+nPjCS/4BDADgAXoGy5aPxPCCDMsMU8xrI11dbKhnr8ywecL62W7qfsDQAOBBz2DZ7Du3Kx6tby1OarNmCHP7XM32ty+88Z8IAMCLAj2DZUs9Z7PtsXrWU14/zc3sK/w9LCcrdsSFh54BQIKewbLZIzGy1TBY1NK0rK5XjBWy2bOpWrQqvfDQMwBI0DNYtnwkhonRwWF2nzd0athUXUKWpTLzRs8AMBP0DJZTf2tY06yh9U2AKLNzeg7LBACYCXoGy3n1LGa6mT77dP2etnlDuzjPBgCYDHoGy0n1DABwJdAzWM6r53BS2+Vz3Obn0/UPsLffRwC4NugZLMd8JEaWvaje5ifKJj2L6aI3uid89hzWnr2d3uwrnx0Azg56BsvxH4kxajY8+pIoz56L4mzW4ovVvZqNCdAzwJVAz2A5/iMxtK7EjFYEhOn11XAvij0QpoSlVToKAK4BegbLYR+JUSwz3FSRn4kMG9NsbVZj2NqwuuY+jsoCACcFPYPlmI/EaBZe0aEOzpQp9JzNnit6LtYS1lvZRwA4NegZLOd6JMYwMZNluNVEhrLMxNlsf/vCa41Rmr1XTweAM4KewXKuR2KYArOYovzCMD9dNqvhLjQuvJF6DkcPzW4BgPOCnsFyrkdimJTMXhUdetFqcRolm9dalqP03AzOugUAzgt6Bsu5HokRNiA40ZMqxsZ0XwpyAz0XRz/ZjgPASUHPYDnXt4aFUvR2rMyqfUYhzmFF2bhh8o4UAyrjEgA4KegZLOfS8+fzOJlVC5UarfoZfzhVNSbW09n5u9As3DRs9wMBAEuBnsFyRj0DAFwM9AyW8+o5nNR2+RxXf0pdCTg+52otAPSgZ7Bs+UiM+cFF9fpN2Ue5/mcYNmyP2Iv0wisEizb0tYetqlTEm+EABwc9g2WzR2IsErzgp7/FAseKsFmLjil+6iz6JBtDoGeAI4OewbLZIzFGBYsa9WIyZgFhen3V1zV2p8b2kt+1CV23xj0FABYBPYNls0dijAqeEDbcVJGZifQvsvSwhVp+Q8GbXKZYP4DQrRL9XOwEADgC6Bksmz0SozLvLLpZpIdbtcwyQZq8YvZc0bOoZZiit1Y6alqPAcC+oGewbP9IjCy47uau9Vaz32oiQ1lmIgyzjLvwIt2GTZqs5+Ym9AxwZNAzWA6i57Fu1gUWZRaGDTVsZr1iQNC48Fq67ebpORxt1PsTAHYHPYNls0di1G0apoRbtepETChaLUKjZPO62GDRG5P1XHF/s0sBYF/QM1i2fCRGFuxlKeapTbWbkpsZRUzXsuaw/erCizLqwYHo2Erjsx0BgGOCnsFyrm8NC6WYKbypqHBCLIoSg4Ytd7wYUBnHAMBBQM9gOZeeP5/HkR2Htu6cSsPZeZ+xS6aeYgq7vZ5FjdkmsyO7HzgAyEDPYDmjngEALgZ6BstJ9Zx9KFvP6FfDoph0AsAGoGewHOGRGOIz3WxV6Dl7QzvM6H/60rJiR1x4hWDRBgC4POgZLEd7JIZJn6DnLD30X332XGxzsTFZDHoGeJmgZ7Ac4ZEYM/XsZ7SV6bLPWF9l9gwAy4KewXKER2KEztOTXTEj9x41Yh5mCX0vasx2RGt1KHiTK9ujCYMAADgv6BksR3gkRmbZTsrS+ywrNtSzV2alxmwk0dSzqMU3L+wQALgw6BksB/nO7Sy4PpfV1u8S/2k1drVxQPvCi2RsTI+eAV4y6Bksh9VzNk/tBsrMCg9nus1meA2birJWtS+81pv2HXoGeNmgZ7Ac7ZEYYlMXzWV9jC5K6D8Up9Fz1mYt0UpvoGeAlwx6BssRHokRBmfVhS9Ch+nErBlhvLbmBD1nvZFtBYBrg57BcupvDWuaNRwimABRZuf0HJYJADAT9AyW8+pZzHQzffbpYtratSa4/jUAwEzQM1hOqmcAgCuBnsFyXj2Hk9oun+M2P5+uf4ANa0BXw0sGPYNls0di6A9uww+JfWRRvc1PlE16FtNFb3TP/Oy5njGLPKzGRFdnnx0U9/ewuwywFOgZLJs9EiPbGgZXalnkll2fPRddMqrGSmSz9zZG1N5scPMUygZA6BkuD3oGy2aPxCjm0jbyd3AxoxUBYXp91dc14iJ8wXoWJTSP+467DLAB6Bksmz0Sw69OuE3rxH5TxQcmMmtVMyCsMasrHCIMiw0bL5pktoZViMJNlmKHNHeh2KU+cVQWgCuBnsGy2SMxfPZKsChZnehjfJDZxeS9uaXSzrDTspRQTqFQx8ZkhZuYLG+9MyvNy1orDit6hsuDnsGy2XduN8OygMwHmSzDrSYyVFGmZ62r0oVX03Oxx4Y6N7uvdzMscI6ew+rCw9E8oHoTeobLg57BsqWeKzfZip61z5qrOsyrzqya9NKFt46e67WsoeesuslHJ9svcQQBLgN6Bstmj8TwMSK44qcwuFJgl089xY4YJftJpLrwVtZzM2WCnrP9KupZHHe9p+gZXiboGSwbPxIjKyoM1noIV03iKC2FpVVmhE09D3fHyG9UU33Ls05bSs/ZvojqmsZttqp50AGuB3oGy7m+NSyUordjNg8LxxY6lxGPt+yFWWofK2OX5pHavTcAVgU9g+Vcev58HiezaqFSP88zc7hw9mZMrGd4V2LZ8YcurThH371PAFYFPYPljHoGALgY6Bks59Vz9hFp/RPNsQFH5iztBIAQ9AyWzR6JsUhwUb1+U/bppv8Zhg3bI/ZilYvWdUtzl0V2ADgm6Bksmz0SY5HgxT/9rc+eizpc/qKVf6c9fJ2NHtAzwPFBz2DZ7JEYxYzZNLd/rReTMQsI0+urvq4VL9rCsKDZads0FQAmg57BstkjMXzGCabRif2mitJMpH+RpYctbCrQxNRX63oelQUADgV6BsuWj8Rozju9V0TJ6kQfozRjNaHnbPbc1HNWxajVbF/EuKHSVwBwBNAzWDb7zu1m8Ci7CFmGW01kqMBMh2GW0deetKxYrQw1JnQgABwK9AyWg+h5lHWaBRaVFob56bJZDQcEpctvkqFHhY0a9wDAcUDPYNnskRijZoRFl2dO0rV3zrU6cpglq0IrMKti1Gql/9EzwElBz2DZ+JEYYXAmy1B7TbV3znA6Y2UooEcYlcl02BWV1bHNbvYYABwQ9AyWc31rWOgwb8dsKhmOLXQuo2c/jNhyl4sBlREMABwK9AyWc+n583mczKqFSo1W/fQ0nIAaE+tJ6pY722yG2YXdDxkAaNAzWM6oZwCAi4GewXJePTc/nRWvpwXAKOg6gDroGSyHfSRGVl3zdbgpK9n/zBoQvklevfCu9fGwP6yjdor32wE86Bksx3wkxrDGSuT0S6I8e54j1GbwuXSVfTbv+zMb0JxrfwE2AD2D5ciPxAj1rJdmcLbJJOpVX1elB+YEHArfz5U9Qs8AAvQMlsM+EkPEiPSuNefOIv2LLD3ca+2boeBFLaYcP6QotsSMQsJNegezpoYHpXLQi0cE4MWCnsGyyyMxKtKdrGe/VftDDwi8tPwuVPTcrEUEZKoTlQo7ih1sHoKinpstRM8ABvQMls2+c1unZKVp8We+91tNZOgkLc6KFCs90DSclqJoqtlx02bRV5V6i42vHOhpfQhwbdAzWA6iZ+3XMFjUXvRHGOaVFjZplGC20bMopHJ0ltKzKLB5RABeLOgZLMd8JIbe1BRAxShetNo9RsnmtfbNInrWfagLaWYUkb4Hmo3XR0cfcYCXCXoGy2EfiRFWFzYgONELWhrlPD3CmKNnLWM9JggrGubSh6N4TIc7qPVcbyp6BjCgZ7Cc61vDMmeEwqiovTnbM1rKhhHzd+cgvbpI/LRBFcBLBj2D5Vx6/nweR3b0M7xsMSXU56/NyevpmDbO0LmyTaZXd993gEOBnsFyRj0DAFwM9AyWk+o5nNGOyuhXK5/LAgCsAXoGy0kfiSH0nL2hHWb0P7MGiDLbFx6fxQKABD2D5aSPxGjOnjMjTp49zxFqMxg9A7xw0DNYTvdIDP/Cz2gr02Wfsb46f/Y8NgAArg16Bsu5HokhtmbCHvrVZwl9L2rM9lr7dSh4UYspJxtzNFtiuiLcpHcwayrDCICVQM9gOdcjMbx4tKt8UT4xDMtqDHehoudmLSIg21NRqegcsYPNQ4CeAVYCPYPlIN+5nZWmXSIis7yZpP2mPqA5DmhfeOVhRxiQNTLc5eHoIRtbiC5FzwC7gJ7BchA9h1IM56ndQJldohC/ZJG+DV5pWbEjLrxN9CwKqRwd9AywI+gZLOd6JIafF4rswr6haLXzwoFCuEm3ZLKem3td1HOYUURmPQAAC4KewXKuR2KEeX1YmFeXkGXJZqtL6VnLWI8JwoqGufThKB7T4Q6iZ4CVQM9gOfW3hlUmhdpwQpw+UQwj5uzF7hykGQAvGfQMlvPqWcx0xTRxGGNymXJ8Uc3J6+lYapwBADNBz2A5qZ4BAK4EegYLegYA2B30DBb0DACwO+gZLOgZAGB30DNY0DMAwO6gZ7CgZwCA3UHPYEHPAAC7g57Bgp4BAHYHPYMFPQMA7A56Bgt6BgDYHfQMFvQMALA76Bks6BkAYHfQM1jQMwDA7qBnsKBnAIDd+X8IsaKf7GfSrgAAAABJRU5ErkJggg==" alt="" />

  到目前为止,我们做的不错,但是这个不是一个有效的网络通信实例,server端的代码在一个循环中同意client的请求并回应给他们,然后并没有针对接收到的请求的数据做任何的处理,同时它也没有能力处理同一时间的多个请求,现在我们就来处理这个问题。

  Handling Connections:

  想要处理每个请求连接,我们需要一个独立的代码处理逻辑和一台独立的服务器,有一种办法就是使用多线程,主服务器同意请求然后创建一个线程去管理这个请求,然后服务器返回在继续处理其他请求。  

#!/usr/bin/python
import socket #for sockets
import sys #for exit
import threading
# from thread import * HOST = '' #HOST name or IP address
PORT = 7001 #remote port s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print ('Socket created') #bind ip/port
try:
s.bind((HOST,PORT))
except socket.error as msg:
print ('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit() print ('Socket bind complete') #listen connecting
s.listen(10)
print('Socket now listening') #simple way as server
#-------------------------------------------------------
#wait to accept a connection - blocking call
#conn, addr = s.accept() ##display client information
#print ('Connected with ' + addr[0] + ':' + str(addr[1])) ##now keep talking with the client
#data = conn.recv(1024)
#------------------------------------------------------- #liver server, always running
#-------------------------------------------------------
#now keep talking with the client
#while 1:
# #wait to accept a connection - blocking call
# conn, addr = s.accept()
# print ('Connected with ' + addr[0] + ':' + str(addr[1]))
# data = conn.recv(1024)
# #reply = 'OK...' + data
# if not data:
# break # conn.sendall(data)
# print(data)
##------------------------------------------------------- #Function for handling connections. This will be used to create threads
def clientthread(conn):
#Sending message to connected client
conn.send('Welcome to the server. Type something and hit enter\n') #send only takes string #infinite loop so that function do not terminate and thread do not end.
while True: #Receiving from client
data = conn.recv(1024)
reply = 'OK...' + data
if not data:
break conn.sendall(reply) #came out of loop
conn.close() #now keep talking with the client
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
print ('Connected with ' + addr[0] + ':' + str(addr[1])) #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
#start_new_thread(clientthread ,(conn,))
  threading._start_new_thread(clientthread ,(conn,)) #close and dispoiled socket
conn.close()
s.close()

  输出结果:

  server:

  aaarticlea/png;base64,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" alt="" />

  Client:

  aaarticlea/png;base64,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" alt="" />

  So,现在我们拥有了一个server,它是一个很棒的学你说话的机器人,HAHA

  Conclusion:

  截至目前,我相信你已经掌握了在Python中基础的socket网络编程,你可以尝试创建其他的社交客户端或与其相近的实例。至此,放学。不会再讲5分钟。

  Bug fix:

  开发环境: Python3.4 + ptvs

  以上代码均已通过测试,当然不排除Python版本不一样的情况,实际上我也在原作者的基础上修改了很多,如果有bug的话,欢迎指正。  

Python Socket,How to Create Socket Server? - 网络编程实例的更多相关文章

  1. php网络编程实例

    php网络编程实例 一.总结 一句话总结: socket_create():创建socket socket_bind():绑定IP和端口 socket_listen():监听客户端信息 <?ph ...

  2. Python Socket,How to Create Socket Cilent? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  3. 图解Python 【第七篇】:网络编程Socket

    本节内容一览图:  前言总结: Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它 ...

  4. Python之路(第三十篇) 网络编程:socket、tcp/ip协议

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...

  5. Python之路(第三十三篇) 网络编程:socketserver深度解析

    一.socketserver 模块介绍 socketserver是标准库中的一个高级模块,用于网络客户端与服务器的实现.(version = "0.4") 在python2中写作S ...

  6. Python全栈开发之10、网络编程

    网络编程就是如何在程序中实现两台计算机的通信,而两台计算机间的通信其实就是两个进程间的通信,进程间的通信主要通过socket(套接字)来描述ip地址(主机)和端口(进程)来实现的,因此我们学习网络编程 ...

  7. Python之路(第三十一篇) 网络编程:简单的tcp套接字通信、粘包现象

    一.简单的tcp套接字通信 套接字通信的一般流程 服务端 server = socket() #创建服务器套接字 server.bind() #把地址绑定到套接字,网络地址加端口 server.lis ...

  8. python学习【第十一篇】网络编程

    一.socket的简介 socket(简称:套接字)进程间通信的一种方式,它与其他进程间通信的一个主要不同是:能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通 ...

  9. Python之操作Excel、异常处理、网络编程

    知识补充: 1.falsk模块中一些方法总结 import flask from flask import request,jsonify server = flask.Flask(__name__) ...

随机推荐

  1. 如何把 excel 设为文本格式?

    选择要设置的单元格,右键选择 --- “设置单元格格式” --- 选 “ 分类 ” 下面的 “ 文本 ” --- 确定. 修改前: 修改后:

  2. linux 学习笔记 Linux内核的四大功能简介

    一 内存管理 默认情况下,运行在Linux系统上的每个进程都有各自的内存页面:进程不能访问其他进程正在使用的内存页面. 内核维护着自己的内存区域 用户进程不能访问内核进程的内存 可以创建一些共享内存页 ...

  3. MATLAB LU函数

    高斯消元法求解线性方程,包括把增广矩阵转换为三角矩阵形式的过程,消去阶段工作 步骤是把矩阵A分解成为下三角L和上三角U的乘积.这种计算L,U的过程称为LU分解法. lu实现对矩阵的分解. [L,U] ...

  4. CentOS 7下的软件安装方法及策略

    一些废话 2010年开始正式接触Linux,入门发行版是Ubuntu 10.10,后来过渡到Ubunu 11.04,这其中也尝试了很多其他主流的发行版.进入实验室之后,开始用CentOS 5,然后是C ...

  5. Android 常见adb命令

    1.  查看所有已链接的设备 命令: adb devices   例: C:\Users\laiyu>adb devices List of devices attached 5d3b5aac  ...

  6. .Net 把网页Html转PDF文件

    .Net 把网页Html转PDF文件 此篇主要利用 wkhtmltopdf  进行转换. 一.控制台直接转换 首先到官网http://wkhtmltopdf.org/下载wkhtmltopdf  ,下 ...

  7. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  8. Python(2.7.6) 迭代器

    除了对列表.集合和字典等进行迭代,还能对其他对象进行迭代:实现 __iter__ 方法的对象.例如, 文件对象就是可迭代的: >>> dir(file) ['__class__', ...

  9. Java的内存泄漏_与C/C++对比(转载总结)

    原文网址:http://developer.51cto.com/art/201111/302465.htm Java内存泄露的理解与解决(1)   一般来说内存泄漏有两种情况.一种情况如在C/C++ ...

  10. UITabBar - 深度解剖

    for (UIView *tabbarbutton in self.subviews) { //        NSLog(@"%@",tabbarbutton);         ...