经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得TCP: (Transmission Control Protocol)

传输控制协议? 还记得IP: (Internet Protocol)因特网协议, IPv4, IPv6? 如有不清楚,还请回去补充下概念......

传送门: http://www.cnblogs.com/Ruby517/p/5808224.html

参考: 《Python核心编程(3rd)》 P51 ~ P57

-----------------------------------------------------------------------------------------------------------------

名称                                  描述                            
                                                
服务器套接字方法                                                
s.bind()                             将地址(主机名,端口号对)绑定到套接字上                            
s.listen()                            设置并启动TCP监听器                            
s.accept()                          被动接受TCP客户端连接,一直等待直到连接到达(阻塞)                            
                                                
客户端套接字方法                                                
s.connect()                        主动发起TCP服务器连接                            
                                                
普通的套接字方法                                                
s.recv()                             接收TCP消息                            
s.send()                            发送TCP消息

创建TCP服务器

TCP是控制面向连接的套接字的协议,通常和IP一起用,搭建这样一个类型的服务器有何妙用呢?其实我也不知道!

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAADKCAIAAADYajfMAAAcGUlEQVR4nO2df2xVx5XHR11tpKrdVqk2UbtSq80fQLYBtTGt1EhRpZIQ2oQQ2BKxgaVp86NSS5uWbIgNZsHbKmnY8ivBbjCJA7YxOMT8SEIgYLAfhGAc8yOY3wRoICSlAUKIDZFClrd/XHwZ35k5c+6989671+/70ZF179wzZ87Mm/N91+a9i8hms98DAACniCFDhqxbt+69997LAgCAI8TJkyfnr34bBoPBHJqoXr0bBoPB3Jqofm03DAaDuTWxYE0nDAaDuTXx3No9MBgM5tZEzet7YTAYzK2JF9bthcFgMLcmFq7fD4PBYG4NygKDwdwblAUGg7k3Udt8AAaDwdwalAUGg7k3KAsMBnNvUBYYDObeRN2Gg3m2P//6ZiFuHldL+Tx2l+j363V1Gw7WbVjwIzHmMb/jXQskt3XjbrpyqVfwXj4He/uLHz3Zu7F2Sj+hNAZtwY+ElaszkpLXzggG6/tmU5bm/XXN+9dv3r527euErd+8va55vz5C7ZR+9rK8UpmP3cVyFUJ48qHTGkIm9FdJMfLsqrqZHQzK8uQYIcY8BmWBFZlZlGVNpmNNpmPlypW7d3cStnLlyjWZDn2Q2in9LGV5MFCZddx7loO+WNCS1KMmV5WF8NcJU+h7FiGu5O9PBMoCKyoTi1sOmWxVZnddXX1dXX1Hx44XVrU8v2Kj1p5bsTGzpb2urn5VZveqzG4i4KwJN4vhz/mnk4aLfhPWE/4s+9MYPyYRcNaEm2UV+M/6Q4vrp/QTYyb5PoHTXvbcEOOl3lY/pZ8YM2S46Ddh/aThYsgE4/2ag4nDYAk20dB62GSrNnWGU5ZNnas2dQaCzO5V0hT9JjQ3LC5n/uo0frGS8OLyfmLM462HG1qbx98khjylzkhpf2qMGP58T19dzCv2/BAx5vGnxpApjXncm+xN5eOHi34TmhtaDz8+XFyJ33r48Z5GGKwYTCzNHNHai62HqqurFzW9tqjptUmVTT+ZWvfDSYt+8OgLsv1w0qIfTlr0k6l1/zXvpUVNr1VXV1dXV7/YesgUc85vSsTwGv+0dLjo/5uNvXwapvYX/1Haq1fNbZqWkp81HCkd7pV0yc8aAtE2/uwmcdsMNYGe9oap/QmJkDI053CkdLhmCC+HK5n0notmsjBY3zXRuOmo1uZWL57+h/+NYE/Onq9Eq7mdfLvv/9sWUxqNm2puF/eVUVdL7l9CD+E5HG3c1HL/QCGEEHfX+BHK7u51Sufw9G9LOFMou1szI20jDNZXTbz4xlGtlZWVNTY2bt/e4dn3F7SfOXPm+wva/QP51PNpbGxsbGwsKytTotXcLkrub9QP9PQjJf0faZFbJo8gdWhEjS1yy/0Dxe1/PqqN2au98b/7mxPr7Xbf5DeOPv1IiT/65BFXQ00eIeQp+KdPP2JSIsagMFiaTby05a9aKysr82WFqSyelZWVKdEWDhUlP2/sOZ15nxg4bV7P1XmPlPR/JCP7TxkhpJaFQ8V9UyRnMWKhMfIVy/x8oBg6U51UT/vM+0jlWhjs2Dit/8Bp87zRTfcs0hR65081wmB91UTTm+9qLY6yKNEWDhUlv3jxyum835V4BeyfDvjdJtm/fISQWhYOFWPL35T69nSUI5dbbnO8Lpt+MVAMnSWFGjhtnjHyVdNeKh9xNZR6KTAjUyMM1ldNrGg7rrWn5jxbJjF02FDV7rzrzjvvunPkv4+UPZ+a86wp5oq24yuWTR8gxj7w+8Fi5KJe7bPHikHTq9qOr2g7PnWkGPD7TT2XFt0hxk7tcasKdlx0hxj8wLLAKJseGCTumK2OLrUvmz6gR3bumH186kjhj27sNXssqV5XR+ydP9UIg/VVE6u2nciTNVUMEEIMqnh224lnJw72Dvyr00aJARM3q8erttXeIcZN27b5wUE9BTznSpdnJw4WYvCDcyoGiMEPNsljbX5w0FU3uv3ZiYN7lCEQpMfmjBNi3DTvQMp52ihxx5wTq5oqBgyqeLZ35N75U40wWF818XL7yZzafL90B1XMv9pePyz4lj/4oeXaCPXDxLjpusjTR/ld1Gi9GVXfk8bgh5afnD7q6pUbJ27pCbjloUFCCDFsbmCUnpa548SgivnmsfyO00eJGydueXnuOCqlXqsBg/U1E690vA+DwWBuTby6/QMYDAZza2L1jg9gMBjMrYnXdv4NBoPB3JpYu+sUDAaDuTXx+tt/h8FgMLcm1u3+EAaDwdyaRlk+BgCAeEBZAADugbIAANwDZQEAuAfKAgBwD5QFAOAeKAsAwD1QFgCAe6AswAEzZlal2gq9fn0QKAtwwIyZVdnUAmXJBaGVpeBvL7BkWqH1IToFXzq+5UcUnBBFWT5PFd5LUugswpG6nNOuLIVePxZFoSyfpITPpSotdC5c0pizW2URQhCnzpkxs6rQ62cHypIs0lilacyZVhb68ecehJRAWT4pEmW5dOnSeRtCCCc+Mbl06ZJXpZycPfKQFQ0/57Cp5m5qVmWha1t2UJ1NAuSKGTOr+CtWqI3t7Yr8iIITIiqLPpYQ1mPCXybEDEjkKmUmzBnd9Mabh5zVTPiRHS5sgFDKouqI30IcqHFcQVSsumLaFg4xV7hYlOWcASGE6YBwJo5jIlcpnQOdsLxFtN0dQuTM3MTasF57LhI+d+4cR1lksQgIR+CS76D+zJGymOalLleOFtBKUSjLZ599drY3zB1v8vda5KtnHfHZZ595VarmHBiLTlibmMM8mTlzRtT65Gh5fZj3LCa9ELY/rOROVrLZ7IyZVdoVY25mq7+TFfZ2RX5EwQkRleVMb4QQZ2yoPnKLdyz/dIJcpczciNH9S9oNlIecA6NoB6XXmegYB/5vQ9pjk4PckjtxmTGzyjQv/tKFbQ9LsSjLaQPakiOcA8fyTyfIVcrswklY9SlIzpxBTT4OEz59+rQrZTHJiumqE2bMrOKvHrGeJpyscFEoy8WLF48aEEJwWgL4bvJPJ1y8eNGrUjXnwOgmtHMhDvKTM43sbOolO8TH1W9DcoZaKfEvuVUW07zU9XH4QofC2xX5EQUnRFSWdwxoNzHhHDiWfzpBrlJrDtYE/HbiID7WnLUjchJwmGQAt39nCfQNyI1zZsys4q8YsTdMOFnhYlGWwzaEEKF8vGP5pxPkKrXmYE3AbycO4mPNWTtc2AV3S6h/G8oqUkIrC8ctDjNmVqkLxcG62s53RX5EwQli/e4PZeMoy4ULFw4qWF8G1d//GWh0yIULF7wq1eYcGNE/NqXhT0RN3mHmnJwDq0qPznk5YsL5DC4hEKrQCN1fXnKnLG5XIxcr7O2K/IiCE1wqC//0oK6MtVoTE76y0BLDF8c85BzIgZ+A81R9XH0GN6BB2Xz9NsRfMW0Lh5grnEJl6fxQNqay7FcQQkQ79Y+9g4BnTOQq1TqYBvU3hCmydgpOsOasjkunqvo7J7KyWCUjP/csoZbLuoy5WGcoS/BULVHtuudIX+gqjTyWVomiZajCURatlBRkx3uk/SkKYdcqztVoFIWydHd377UhhLD6mJy9suF3J+ju7vaqVM1ZHoK4ibVmSzTmImd6cZiToicYgbQrC7GMnKVW19zJqsp4uyI/ouCEiMrSmRLkKi10LlzSmHPalaXQ62cnfcrS3PmhbBxl6erq2p0Surq6vCpFzjkl7cpS6PWz4+2K/IiCE0Rz52nZmMqyKyXIVVroXLikMee0K0uh189OX1aWGYV+vDAsyVZofYhOwZeuT5po3nNaNlpZCr0HAADpQGzYc9o3KAsAwAm9lGUDlAUA4AIoCwDAPWLjntOyQVkAAPERG/eelg3KAgCID5QFAOAe0bL3tGxQFgBAfETL3jOyQVkAAPERrfvOtEgGZQEAxEe07jsjG5QFABAfkdl3RjYoCwAgPiKz/4xsUBYAQHzEpv1nZIOyAADiUxhlifbYZNpTsP8Lm2j++SdyStYnVLrNEwAVsfnAWdmSoyxqeyhlCetPODMLlfncWSIsM39OZP7EmZeYDgB4JFdZ/EvWQgrE4Ttz6l/NkD7lzIvppp1R/KFzlzAAPuKNA2dly6myyKVCNxJu2rCB2rN2pMeiL+VaWUwLwhzXOjR/QbSibI0PQDabFW8cPCtbopQlmo98aiqMRN2zBAa1KgsnYRprttoXKOzUQDEjthw8K1velEUu76xts/KVxVpOpkGJWopQqKFyNvmbqt1a6szF5HeHuICwiDcPnZWtIPcs2o0rSw+nniNUF19ZIgxEBKR9+Mpi9bQOyuzOVBZCZ0GxId489JFsBfxtiPBnOjPDZiVl4chWfGUh5hJBL6AsIPmIrYc+ki2NysK5weFXKRGfE9mUKnEaCOJEWUIl7EpZAPARbYc/ki2ByhJWLDjxVQdrGsxTa7vVmdYLbcLMlExXoSzAOSlQFrpFG9xUnKY4oUrRubJYIxA3GlbdZF6lX5FQywVANpsV2945J1uh/m0o4KA91bYQfZnO9D1L5DJjll8oYdVeCntDwRGjaPHpNQdFhWh/55xsuVOWaL/F8N8tTb9Q0IUU6BXhF4E4yhJBApgp0XDCmpzplwDKAjzEW0fOyVaQ7zqrm14teKJC5NNQ6mASHW0aRNqmq0Rf2oGIzGmMJljWjhwHADxEx9FzsuEpCiDUnQ4AWkTH0Y9lg7IAAOIjth/7WDYoCwAgPmLHsY9lg7IAAOIjdv71Y9mgLACA+Ihdfz0vG5QFABAf8fa752WDsgAA4pNzZfnDn+bCYLBiM7H7+HnZcqEsEXoBAFKN6Dx+XjYoCwAgPmLPiU9kg7KkF/5n/EN9GyiUT/wuoG8g9p74RLacKgvxDSB8kDw+Mb89ZP0ClPVrVpxRck2uR8zbjNJeBWLve5/IlgdlqbCR9jUtFK6UxRRHPmC+B+T5pewzslKQ4dwi9p38RLZcK0tFRQXhnMlkstks7ROHvnpnpM6LP1PrzYtWWThpxLkhjfAayc70uNblIiZIBOHH4c831AokCrH/ZJdsBVQW74Ylk8nkTln8NHLq74qYeQqbEJiuqnHUOmTmE1YdAgnEURbrAbOdbuSsHj/zPqUsB052HXi/68D7XQdOdh0onLJ4vwQJIUIpy9atWysrQ2dV5MqiFrzpmGhhvr2HUiLTcHF6WeucryzRtMY6nfgOyURckZUey4OyqNrhy0pYZZk4ceLo0feGTUlbaVlDyZlKSG0PvKsHjrXxtXHocUPNS9uuNkZQlsBPU/zkKwvfM46y0FvFlJI15yQjDr7fJVt+lMU/8HTEX+iwvw05UZasVPxaB+buUUMFdpLqTw8UdksFwppGJ8YyFY9aGNYupgPmLGKqqqmdVhZCzZnxiTimTKzzTauyHPqg66BkeVMW0fOPRLKseG75/20obIULBcKZCEjEMYUi0Fa+ekqkFEomTF1Mq8GcDmc9iSTpdlpZ4sdnDhGYID3f9CpLt2z5VBYZWU04ytI0WTRNFkdrrz9ae33T5IgVaGrhKAs/OBEw2m6m/WkhIIJbi4ejLGFXkhiO34VwS4WyRA6YZMThD7ply89fcOVbFV9ufDetspSWTiktnbJh41bPAsrit2/YuLW0dIplzn1aWejjQCOtPqZsTfnL7SrMSUVTFmvyJh9OYqEuWZ2da3EyEYf/1i1b3v5tyBcXVUe0ylJeXl5eXl5ZWeXZH8cL2fz2ysqq8vJyy5xdKwuzjNVTt7sqrLJw3kK12UaWCQ45VZZsyFWKcCnsu0WfVZZ3/tYtWz7/1dn7O4vaJXfKYnoXJU7lRlMoIrg1vrYLMS4BU7BoZ6K7YN/m0ENbodeEP5wpiPU1ImJqk6Q3jzWaab7RVi8hFFJZvH8bCvh7f4WJNpkiRy11a3ESZaM6BErIGoS+lCOcj1io3Zj2KhBHTnXLVvDvDUV4pwIAJI28KgsAoEiAsgAA3COOnLrQIysXjpy6AGUBAMQnr3/BBQAUCXl9igIAoEgQWw9/5Fvb4Y+gLACA+Ij1nR/KBmVJL/zPWVk/HcfslYsuoG+QV2URbNxNsIgI9QlOvrhoPx0nX+3bn5TLc/z8D5QjCqAsludr4wnbUXGlLKY46mfYra9Unl/KPiMrBRnOLflWFvoJCXjCdjTUefFnar150SoLJ42YN6RhXyDZnx7XulzEBIkg/Dj8+YZdhOSQIGXxbljwhO3I41oVgTmKGketQ2Y+YauLTozvr87dtBrWdrqRs3qM3EOMmBaSoiwVeMJ27HH5NaO+hxODaluYb++hlEgdIpQ/p52YHd8zlFsoFTZd4kRIGgVQFjxhm45DjxtqXtp2tdF0TLfQqhFHWSL0iqwsfM84ykJslSxvJVNHYZRF4AnbjIGiFWRW2alaeTIVgDYsUQl0vdHqxplF2F50O60shJrzy94Ux5SJdb5QFj14wjYRkIhjCkVAKIt1UhFkwtTFtBrM6RRQWeLHZw6hXRYoSzjwhG0iYLTdTPvTQkAEt+5sjrKEXUntcITaEr047clUFnq+UBY9eMI2ETAXykIfBxpp9TFla8pfbjcVDH9ScaZvaiReymiiE2Fv8EWKjpZwCvZvQxV4wraLd3hOGqaUTG+hprBWZaFTCksulCUbcpUiXIr8bgFlCQeesM0czlr/VpiCRTsT3QX7NocemgO9LMzhTBGsrxERU5shvXnCRrM6p4JCKguesO0WtdStlUlsdNUhUELWIPSlHOF8xELtxrRXQeK+NxT2bQoAkEDwFAUAgHugLAAA90BZAADugbIAANwDZQEAuAfKAgBwTyqVpaqqaqmZtra2G264wfmgRQLnU3Zx/Jk+0TJxOHoeIls/o+hklEKRsidsX3vttU1NTWdJKioqoCw+YVc7D8rCdAt88I/4UF+oz0DJAenVIFqsS8fZz2q7tiXsK5gQEvdJuQryCdu33XZbd3f3M88884SBI0eOQFlkQkkDvbM5wZk7np+VemANyK//sI10KNNKxlGW9JKUp1XKED6estx4441CPKGzinfffdekLPI+U/dcMrU//puSdfcTNcwXnUAoNQ4Hfl96msxQxCoRU2ZGDrV01gnyPZNDapVlwmUhsorNI5QlK8mHdm8l7XUSugpXTzlBAjVAXArUhlon2jRM9RChJdv7ZeJ4ElVtPQ3VyI9szZwTP3J7EkitslzvWFkSiJP9pNURQjWibfdolUm08NOwJhNHWSJrlnNlMaH1TwKpVRaNrERXFvp1ClwNbDW1ozYUsRtMEVT/CLvKut3pGtBWVORoHAc6E5MzEVZ7SvswcyC2EGeaoeaYOopOWbLmaglVCdZtZC1pwp/Ih2i3OtN50gnQWmldAWZMejjC2fRyaE8jvPTWyH5YdXfFVxZhRuufBFKqLL8VYqnOnnCrLKG2vtpI1xjhH6oXTSAH08+scldlkhJtGnxlUcelfawVRcxIzcdUjTGVhVYTtRcH7bIEgtA+hSWVynL8+PEPDezbty+BypI1bOtQp5ysCGdTBdJzJPY6UTzWPDmVw+xCV7X1lNPoT58f2bo4kUm+pnikT1meeOKJP5A8+uijY8eOraysNO3OgiiLtjFvysIflJmq9SoR2apo1uHURq2Ic9Scbgx0D2hNTGVh7kAO2viFJU3KMmTIkIcffvgnNu65554FCxbMnTs3vrJkY2wXZketP3MIDqbaIPKxToFzldPIFDWrMx02jrJEy0E7IicN6xAch4SQAmURYoEQ1Z796levmNKTqampUT/L69eM/1N9C9K+AwTarW8Xanscf2YXE/ydGjYNTpLWnJl9rRPh1xtzuAijyCuptsuNcebCn2lhSZyyqE/YFr3+9adsho1MJjN37lz6WwLFA7EIhCiofelSp0XEqoNaUSOGo1OlRzGpp7U7MwfrOwEzVVOQtOzqxH1vSPfaV0h2a3t7u3z11KlTzc3Nt956609/+tN777137NixUBYACk4KnqIQUJa2trZPP/3Uu/TAAw+810P//v1f72H27NnDhg2DsgBQKNKnLCUlJbW1tbt27fKu1tTUjB8/fsCAAddcc80NEpAVAApIKpRlpGT9stmsEKKsrGzp0qWbN2/eJfHkk09++9vfhqYAUHBSoSyaf4MQZmIOBwCITwqUBQCQOqAsAAD3pFJZ9u/d6dvePTs6335r545tO3ds63hry7a2zVveaMm0Nmdam52PWwxYP1fC6RXf3/SBjlCjgAKSsidse+zfu/OaLy6/5ovLv/C19i989YORv/58w57LG/ZcfqXj8sq3Li/acKm5eW1z89oI2fY9wq52NGUJ5cn0F8pHy9QDkFgS90k5zifcoCx8Qt0dqM6EAEXQLL5zFsqSchL36f6s7huJx44da+nh2LFj+/fu+NLXG7/09UbxjWbxLwdK7jq/fV92+77svmPZwyez2w9dXrvm1bVrXg1OVdrB6m7Wbu6CY6q6UBFMp/5SBC5pC9gaJ9TQhLMqN1CWNJIOZWlpabln5GjP5s+fv2d3x3dvafzuLY3/eF2juC7zT/92cF79xXn1F19u+XzFxssNa//vlZdXvvLySs1seyuL9lJyMBVSqDzV4gyE1ZZ04CoxIvMGxJp22CGoOYMEkA5lWb169ei/f9GzhoaGt3e2/2DIkh8MWfK1by0U1zb9wzdaf1l24pdlJ55ZdH7WC5/+T2XXiuUvrVj+kma2ZmVJIMx7AWYQk15YZYtIQ41ALGwEZUn+awRMpENZGhsbOzo6Ojo62tvb//KXv2x/a+u3Biz41oAF//yv1eKrC8W1K265e/std29/uPTdh0pPjZpwdNmyxmXLGjWzNSgL/U4YuBp4Y1c7akMR77emCKp/hPftQHf12OQgt1jH4qQkbJjyIZxBYik6Zcmaq0W7X4nKpIvTWtKEP5EP0W51pvOkEyCSMS1LqLQjqB5IMulQlqVLl/rKUlVVta1t83XXz7ru+llf+dqsL39l5pe/8vw3v7P2m99Z+70fbykZ1v7dH29ZsqRhyZIGzWxDKguxm60ylCWLlvYP1YsmkIPpZ9bwd5ZAKNXZNKh6lZ82kRjuWdJCOpRFvmepqqrasrmltbW5tbV5Q/Prr69d/eqrq1atXL5q5fKmpmUvvrh0yZLF9fV19fV1mtkWSFmyvGIrrLJo+9LFrK15wjlUztbMQZJJjbI091BVdTWNixcvnjx5smXjurq6hXV1C48dO9bd3U1ELqCyaBvzpiz8QZmpRsgwshxAWdJIOpRlz549VT3Iz5Tr7Nz15pbMmjWv1NfX1tfXNjTUZzIZInJYZcmaq8taVMyOWn/mEBwCdxDWUWR/h8oSQQv8TKAsaaSIlEXdqXIJEXfygXbObb+2XKP5M7sQs2Y6RE5DS9g01JiBvupPkGQSpyzqE7atTJw4cfToe0ePvjdCen0eYjEJyVD7mpSFM2hMIdDqXZyAIA8k7ntDEfbN1q1bKyurKiujpAcAyAWpfIqCTNNkcbT2es+aJuOtDIBEkD5lKS2dsmHjVt8CyiJfKi2d4nZoAAATKAsAwD3pU5by8nLvryqe/XG8kE2+VF5e7nZoAACT9CkLACD5QFkAAO6BsgAA3ANlAQC4B8oCAHAPlAUA4B4oCwDAPVAWAIB7oCwAAPdAWQAA7oGyAADcA2UBALgHygIAcA+UBQDgnv8HbXp44RAukvYAAAAASUVORK5CYII=" alt="" />

下面是创建TCP服务器的一般伪代码(就是掺杂了很多中文的代码), 由于只是个框架,所以直接按执行只会报错 !

 # coding: utf-8

 from socket import *             # 导入socket模块的所有特性

 ss = socket()                    # ss: (server socket)服务器表接字,创接服务器表接字
ss.bind() # 套接字与本地地址绑定
ss.listen() # 开启TCP监听器 while True: # 服务器无限循环
cs = ss.accept() # cs: (client-side)客户端, 被动接受客户端连接
while True: # 通信循环
cs.recv()/cs.send() # 对话 (接收/发送)
cs.close() # 关闭客户端套接字
ss.close() # 关闭服务器套接字

点我

所有套接字都是通过使用socket.socket()函数来创建的。因为服务器需要占用一个端口并等待

客户端的请求, 所以它们必须绑定一个本地地址。因为TCP是一种面向连接的通信系统, 所以在TCP

服务器开始之前,必须安装一些基础设施。特别地,TCP服务器必须监听传入的连接。

默认情况下,accept()是闭塞的,意味着执行将会停止,直到一个连接到达。这也就是说,服务

器只能无可奈何地等待它的顾客,客户端联系它。

一旦服务器接受了一个连接,就会返回(利用accept())一个独立的客户端套接字,用来与即将

到来的消息进行交换。使用新的套接字类似于接线员将客户的电话切换给客服代表。当一个客户电话最

后接进来时,主要的总机接线员会接到这个电话,并使用另一条线路将这个电话转接给合适的人  (如客

服) 来处理客户的需求。

这将能够空出主线(旧的,原始的套接字),以便接线员可以继续等待新的电话(客户请求),

而此时客户及其连接的客服代表能够进行他们自己的谈话。同样地,当一个传入的请求到达时, 服务

器会创建一个新的通信端口来直接来客户端进行通信,再次空出主要端口, 以使其能够接受新的客户

端连接!

TCP时间戳服务器

【时间戳指的是ctime()输出的内容】

注意,格式化字符串%s无法传递元组,所以要先用str()函数将元组转化为字符串

 # coding: utf-8

 from socket import *
from time import ctime # Host: 主机, Host变量是空白的,表示它可以使用任何可用的地址
# Port: 端口, 端口号范围为0~65535 (尽管小于1024的端口号都预留给了系统)
# Buffer Size: 缓冲区大小, 这里设置为1024B, 即1KB
# listen()方法/函数的参数是在连接被转接或拒绝之前,请求的最多次数 Host = ""
Port = 21568
Bufsiz = 1024
Addr = (Host, Port) tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(Addr)
tcpSerSock.listen(5) while True:
print "Waiting for connection..."
tcpCliSock, addr = tcpSerSock.accept()
# %s 可以代替str(字符串) int(整数)、float(浮点数)、list(列表)、dict(字典), 就是不能代替tuple(元组)
print "...Connected from: %s" % str(addr) while True:
# 从Buffer: 缓冲区, 取出客户端发来的数据data进行加工
data = tcpCliSock.recv(Bufsiz)
# 如果data是空白值,那么它的布尔值即为假,not data即为真,那么执行break语句,跳出循环
if not data:
break
# ctime()表示当前的系统时间,即时间戳, 再把处理好的数据发回缓冲区,供客户端利用
tcpCliSock.send("[%s] %s" % (ctime(), data))
# 关闭客户端套接字
tcpCliSock.close() tcpSerSock.close()

点我

一旦进入到服务器的无限循环中,我们就只有被动等待客户端地连接。当一个连接请求出现时,

我们进入到对话循环中(第二个while语句范围), 在该循环中等待客户端发送的信息。 如果信息是空

白的, 这意味着客户端已经退出,所以此时将跳出对话循环,关闭当前客户端连接,然后等待另一个

客户端连接 (只退出第二个while对话循环,第一个服务器循环还在运行)!

错误1, 如果出现这种报错, 说明port: 端口号已经被其他程序占用, 也许你已经打开过的服

务器没有关掉就又新打开一个了!  此时关掉开着的服务器或者换一个端口号就行了。 (有效的端口号

范围是0~65535,小于1024的端口号预留给了系统!)

查看端口使用:  >-|->> http://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html

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

错误2, bad  descriptor, 一定是因为你把客户端的结束语句放在对话循环里面了(第二个while语句范围)

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlUAAAAWCAIAAABmN/4OAAADQklEQVR4nO2ZUY7kIAxE+/6n4mj7MdIqAlyUy2QmHep9bWJjVxlIj7SfjzHGPInWWmvtr1UYY4wxxhhjjDHGGGOMMcYYQ+D/3LriaZjXUj/cvh5X2oXofZTzTLBazcveOQgVcPe9ZgUedTZkMY9yYcyEP/n6vJjoEzn56fuGuS0Fa172jqLeXViYl5ngK87Gkne4MG+mfkZ9yq9E0/jGKXXfevDp136BKhX2dr+13TNb/ALvcGGeAv7zU4t2b6bLQeU2sMXR/zfT4jhaqVwnqoa7VPyO0ah+1imYXsqdUHm5O9dQvfu0703LcdnIETmNVLRrN+aAsuNa0HSZkFJlTgSfJzl6fRTO8fKUa47G0KgztZysXCeqhrtU/C7tyGajRll3TH73JuuI7I4n+Yk/ylg8o1kQRlaWo5Vp4IW3qjLHER2g678rj9MWy7WRNt7RUuS0MhkVKhdNgYVtIIritSAqPJJ2gPJrGlmTLzutX3E07TuuxQXBkqIq+TGSR5bCOmW/UeUtqsxB4APB3IFlZXBSs28YGM3Yb2UaS8Hy9cOTjKZ9t19GYcS1O3Yn1FwOZEzY5UhOmEYrqio7OJ0eqQGvxUUYv1HxiiNzKG2gC43JUXRalmzKn/KsnaxmPspXrhPV3+sIR7HfygQ0d0z+qJk/G/XuqYRpFGvO6uGnMU2oGCHTmF2I6jN+l6rMuXQHvXKeopszjU7TtPOKKzOa+ehv3q6o/l5HOIr9ViaguWPyec11R8t8YTtagKZn9EtW7qKCETKN2YWoPuN3qcocBHlD5EfcBR9H7bwy11jryPu9A/7O3xfldx/Dr81OldGMo5ojUq2wHYKMaG3KYGVWpGDG71RkVH+LKnMWbWBLFD8uK48JkfKUI3wHljdErpxN4xeOkq6ZFb9jdGoZ7xEuvlxbL4sFMwnZ7qSwXVFGEu93i6qlyJSksdRNqsyhgKMmR/k34FwyrVML8R1gbohWOZvGL2wBTLtsVNhBALM2WzmaA0iIHMndBWEp2byebu1UIa6sRZc6gd9OKjPPXaqMMQ/lzNt7puuT8Y4bY3rwX+Lv4zS/5gfvuDGm57Tfg9P8mh+848YYY07Ev3/GGGOMMXfxD6Y/icQnnaNPAAAAAElFTkSuQmCC" alt="" />

单独运行服务器的话,由于此时尚没有客户端的请求,服务器输出的只有:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAewAAAAaCAIAAAD69PiHAAAB8ElEQVR4nO3XUW7EIAxFUfa/KpbWnyhKY3i2gZmQ9p6vNICNibCmpQAAAAB4sVprrfX7a7EDviDwJHsDB+6kWOJGe6oF1N++v4G32PYLAihlURNPxd9BNZ7e0b44H2Br/7mJP72Ld+CsgK25TVz/YtU/ZvUPXjfsdY4OHii0HV+MipPRZ+LmzVakT2P+rMRoNeJhhysCkHC7TsVr4qlrPLzWLhRrU12gGTlYr7s2mzo4mt1wPPLC0VS97p4BRJ33xz7o+e5Ld8gNeL5P/ak120c20UDHmanoqT+vL93SFtYLIOG8PPbhOuGmF0TEdzegX9o7n8oS3FUk71iv0Qtn6l07mt15b8KnvyCAw3l57EPpdPDIjY0MiQmfbgG9+fMtL5txLG92tPcFIxXt+QUBHM7LYx9K+LKJG7hnC+jNz+adzziWNztqRXYVnPPIFwRwOC+PfSh7N/HenxG9+TryTKOJRI7nzY7qr6Mnu1U3J8xUBCChdkRGmxN0fJ36NmQn621nqw4eSGRVPOny0xg4q/iu7IQvVKRfLhkF/pRIR9C3UbSA2xwdubkld2PN0XjJ2Q3Hs8QjZ/Ne36TOKpU3uDGxfKwi/XLJKIC9cGMB4K30r0gAwHbcf+QBAPuigwMAAAAAAAAAAAAAAAAAAABAww8M1JqqowgwMAAAAABJRU5ErkJggg==" alt="" />

----------------------------------------------------------------------------------------------------------------

TCP时间戳客户端

【注意】 由于客户端的connect()函数是主动发起连接的,所以若是先启动客户端而不是服务器的话,

没有服务器的响应,那么将会出现如下错误:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkwAAAAXCAIAAAB20IeJAAACr0lEQVR4nO3b3W7UMBCG4VwkFQih/p1tdisQotDL86VxsGKVYvvLeGazdaz3OUoyznjGAbuVYPo0HycAAIbEIQcAGBaHHABgWBxyAIBh3c2nTfOnlFJKH5thJGmh9rw2pluiVN1LJBqZF8Bu3B045PZksEPOfkpZWvZFHYUB2I3Ph5dN83PIXZc+D25dTZg4S/57fsVbPW9eg7c5AB34cvh+udZ/833R4uZiz5wy5s5MVRWT62gkc1wtm54l0m8ereV3d1p8UaytI2qft2kAgN59nX+cL1JmOcwdXd16IvNqq1XVBuhoJHNcLZueJdLvajvxZotv1SbyRe3zNg0A0Ltv88/JtmVEbotTrL6bV2JnLLKY2Rh1ZA42JV5MmVpUvyuijttIU5eH+UVrtFbPaqmOXgD05f74a2rfC4obinhXb6CtTywsNet+I6uxWrB799QrWVvtrfu1VCgUX7k8zC+MUbEgxlLdnwlALx6Or+cLsSm0bnP5SL2B6v3It9HozJaa7VF75rha/ut2pKO6X8cKFF+JzFv83JYpWgcA6N3j6Xf+cPVIsG/r6T0dLQ7zbTQ6s6Vme9SeOa6W/7od6aju17EC4s+Gb15jVaulbv01AWzu6fRniv1cbLnNr4uDi3wbjc6sc1qiln63UMsf78getX99o+IrlnX23ep5mwYA6N3T6e18kTLLYe6ovl3NnA/IW9DPLVUZE8Yztw6zv5iXtBwZ6TePFlvW30hzfMFgVM9rHwCgd8//Drnp/b6Qj/RF7U/EhuLequxV2aORzK3D7C+mCst0rVHHF9SCn94X1fMaBwDo3fPL2/ogdINt95ZYbWD3lr/JoX/B35lgxDoDgzj/wxPsBZvvbbDOwCA45AAAw3o8Fv6fHAAAI3iYOeQAAIO6n18/ugQAADbxF8ucnFqBn3wcAAAAAElFTkSuQmCC" alt="" />

 # coding: utf-8

 from socket import *

 # Host:主机, Port:端口, 指服务器的主机名和端口号, 因为在同一个计算机进行测试(本例中)
# 所以Host包含本地主机名 (如果你的服务器运行在另一台主机上,那么需要进行相应修改)。端
# 口号Port 应该与服务器设置的完全相同(否则将无法进行通信)! Host = "localhost"
Port = 21568
Bufsiz = 1024
Addr = (Host, Port) tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(Addr) while True:
data = raw_input("> ")
# 如果data是空白值,那么BOOL(data)布尔值将会是False,not data即是True,执行break语
# 句,跳出while循环
if not data:
break
# 把数据data发送到Buffer(缓冲区), 供服务器提取, 进行加工
tcpCliSock.send(data)
# 把服务器处理好的数据从Buffer(缓冲区), 取出来, 并打印出来!
data = tcpCliSock.recv(Bufsiz) print data

展开

客户端的主机名和端口号必须与服务器的一致,否则,将无法进行通信!  因为此处是在同一台计算机上进行测

试,所以在Host包含本地主机名(localhost), 如果你的服务器运行在另一台主机上,那么需要进行相应地修改。

如果出现这种错误,说明服务器和客户端没有连接上,可能是还没启动服务器就先启动客户端了,也可能是两者的

端口或地址对不上 (比如忘记写本地主机名称'localhost' !!!)

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfAAAAAVCAIAAAA2MCs0AAACIUlEQVR4nO2WS3YDIQwEff9TcbTs/JKAmpbE2BOnamVooQ+M9Px4AAAACMYYY4z3evgkxjei/cjmtohUdS0dtRMX4J/CQD/Lhw10fyI7JdfUQmIA/xQG+ln07Ht1Nm3E3Py1f3Cp4845VIsDeCv6K6+py0byPY+JIxU9d5bOtdrx3CfypqN06p3VyH+50uVBcbcF1Y+bMgC4KWPiiLpts07cckWzNOeZOm567hN501E69W7L6Re7PBUFqql+3JQBwE3Ztkdn+dhN8+VyziRVjpPk0rOpFjw3ixIHx0Sk6rNCLSw7RT035x9ZNcpnm2qhFoBbkPrul80jzuphkd1xcHLW9XZuY5tweVLom4xu++p6nQwFyyPPzfmHqYoLMVMtPxPAmxENkG3ppVszqI7VKSebs6/6nvtE/s9WpFVdb+EGlkc6cZfP7YTIGgD8Abbjzx9h4ydaXZrVmkp7dnL2Vd9zn8j/2Yq0qust3ID4Nmpxzay2qV79mgBXsW2PznL+vTSOEis0lfasfTqqU+8VRP77Ffmq//omyyPOPdeWOm7KAOCmjIkjql5uPc8GUeapinSjbtu47Dlr5h+cU/pu2al3Vpcl6zfSFF6wqeq4vgHAfXG+/qzq74jmKbeln5WvdjxnzfyDI8AJl1ULL6hpPn1N1XFNAwCAOoyYV8JtA8CFNP8Lgwn3DACXw6B5DdwzAAAAAAAAAAAAAAAAAADAXfkCUWp5ed4ZnkUAAAAASUVORK5CYII=" alt="" />

客户端的输出,可以看出,它先把自行输入的数据发送到缓冲区,然后服务器将数据从缓冲区取出来加工 (还是

通过服务器代码里的tcpCliSock.recv()方法),最后输出的是经过服务器处理过的数据,即我们输入的数据加

上时间戳!

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

服务器的输出,主要是诊断性的,当客户端发起连接时, 将会收到"...Connected from..."的消息。 当继续接收

"服务"时,服务器会等待新客户端的连接!

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

【127.0.0.1是回送地址,指本地机,一向用来测试使用!】

-------------------------------------------------------------------------------------------------------------

客户端改进

上面的代码有个问题,就是当服务器与客户端还是通话的时候,我们若是按 "Ctrl + C" 引发服务器异常从而关闭,

那么此时客户端的显示是这样的,输出空白,个人猜测是由于服务器在执行tcpSerSock.recv()时引发异常,但两

者好歹对话过,所以系统返回了空白符给客户端,

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAa4AAAArCAIAAACvnfsSAAABDUlEQVR4nO3dQQ7CIBAFUO9/qh7NhYnRFlGYmVTxvZWafuLqhykLLpcVbc/O/jsAAH8usiOzmwNWEBlODbbAr9qV1+3rh40WyQKcrHNA8bbOIlmAZMFJduhzVhYg33QbNmvruFRz/UgWoMRc4xzrrLMHbE7Bc1mAKhONs6uzZvz+e78Kh7IAhUbbsPOO764iC1BrqINe1Vl1FqBQyq6wefSRmwWoMveu8DjPbi25WYASc6Xzdrs39NjnWYB805svVQgsIn0IjdSZKgQWoQoBQkcfjk2ARUTKS/EBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsKLHezun7y8eDb56uPoC5azFXXYK3+AKSJak0LTvLYAAAAAASUVORK5CYII=" alt="" />

可是第二次就出错了,因为此时服务器已关,也就是没有TCP连接了,所以也就没有了交互,系统怎么返回信息给

你所以这回连空白符都没有(纯属个人猜测)

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

所以我们要在客户端代码的 tcpCliSock.recv() 后面这么改...

 data = tcpCliSock.recv(BUFSIZ)

 if not data:
break print data

这样就可以在引发服务器异常,然后客户端收到空白符时直接退出客户端

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY4AAAAqCAIAAAArnCtnAAADNElEQVR4nO3cUZKrIBCFYbebXWUpLu2+pbw0tIemSQb8v4epMkrTEOlSx5nj/X6/Xq9jU+f/fp0OgKi9SxWATUwtVdcLGS5qAMQllip7k1WUKqoVgKDcqyqnVNlNAFDNK1XOZRQ1C0Cfa6nKvUc727K6APAUxVVVYikpQlGhAMTZG8BAtbIXTdefn2MGUwXwXNVnVeFrq6JCcQ8IIEfrsXqsoNhSVewCgAjnN4CxO8HWJqUKQNyMq6rqJqUKQNyMZ1XH5U6QZ1UAEqT8BvDa9uBZFYB0ue9VFc0pVQBy5L6tLpYqyhaAPrP/XJnHVQASzPt/VdQjAGkoVQAWwD8sBrAAShWABVCqACyAUgVgAZQqAAv4lCrlvaeRt6JibWf/GtEf6ex+q70476D5WaW8v+Y0Gfn2UxLAozml6rx7n1PvJdz2Vwtjar+983x+pVT5TUa+/S5/6vTAH1KUqs/n1UXS2vSNtLWJ5fJX5rwe9dmofi/KkeHEbJDBbzCQxrzjsapWqSo+GTk7U5aQv6ua3u0npyFGts31rGIDjB0cUA2iz23vXBV7A5FbOWM3Yqk6BqrV+JmkLACbnj6iVtvW3sG21Ti9o1Zmo9Wpo9qwCKgMWU/Mny5xUOHxYhniDaDz4S2xSeBE9JdQK/+syLFNpxclMSXnq2oERyD4rzbFzLEJ/bH6R+85IR7vH1bdaz+0Z7Z+fFZksZeRSVam1I8fiHwN6I/XD5g+k+JerK3rZYWPrnMi5QRyVnvrE+VEb+U2e4HdTnLKmgzMfCByb6q9M2mNZI5VOc+qHLcrzR4czM+NM7IM/NzGF5gTTZm98QPEY2JN/PH6AXtn0gqnjYWJpao4S5TFltLWxtEjK/3qp35vR2JbfbBihoPzXG0yMs+Jm105Yzf6VdVp6L0obQMnpQ17NlaveICTzG3XYttqSnbggdnwsxIj+63EaRzce2rzrAwH++i6AfTXwGBbPQG76US+7nLO9Vbk20/0I20rZ04Cs+FnJUa+bXg7zyN7qwkMzhI2sdyfK9tlH2u7h/1GBNRRqpa234iAuuVK1dXtQj2NL2UGINejStWX0gKQbulSBeAh/gGogcH2qkxbZgAAAABJRU5ErkJggg==" alt="" />

【卷二】网络二—TCP服务器与客户端的更多相关文章

  1. Python 绝技 —— TCP服务器与客户端

    i春秋作家:wasrehpic 0×00 前言 「网络」一直以来都是黑客最热衷的竞技场.数据在网络中肆意传播:主机扫描.代码注入.网络嗅探.数据篡改重放.拒绝服务攻击……黑客的功底越深厚,能做的就越多 ...

  2. python socket之tcp服务器与客户端demo

    python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...

  3. 【卷二】网络三—UDP服务器与客户端

    这是另一个类型的服务器/客户端,无连接的 UDP: (User Datagram Protocol) 用户数据报协议 参考: P58~P60 UDP 时间戳服务器 [时间戳 就是ctime()显示的内 ...

  4. Linux系统编程(32)—— socket编程之TCP服务器与客户端

    TCP协议的客户端/服务器程序的一般流程 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后, ...

  5. C语言之网络编程(服务器和客户端)

    Linux网络编程 1. 套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字.其用于标识客户端请求的服务器和服务. 常用的TCP/IP协议的3种套接字类型如下所示. (1)流套接 ...

  6. Node学习笔记:建立TCP服务器和客户端之间的通信

    结构: socket是应用层和传输层的桥梁.(传输层之上的协议所涉及的数据都是在本机处理的,并没进入网络中) 涉及数据: socket所涉及的数据是报文,是明文. 作用: 建立长久链接,供网络上的两个 ...

  7. UNIX网络编程——TCP服务器“拒绝服务攻击” 解决方案

    前面的博客<<使用select和shutdown>>里面的拒绝服务型攻击也有提到. 说这是一个完全的解决方案,其实有点夸大了,但这个方案确实可以缓解TCP服务器遭受" ...

  8. python写一些简单的tcp服务器和客户端

    代码贴上,做个记录 TcpClient # -*- coding:utf-8 -*- import socket target_host = "127.0.0.1" #服务器端地址 ...

  9. c++ tcp 服务器和客户端例子

    目标:  完成一个精简TCP服务器,可接收来自多个用户的请求,并返回结果. 思路:  (1)服务器      C++ TCP服务器的实现主要由以下几个函数来完成:        a)socket    ...

随机推荐

  1. .NET Mvc Razor

    .NET Mvc Razor也可以这样玩! 忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问 ...

  2. 读写分离子系统 - C# SQL分发子系统(ADO.NET,不支持EF)

    读写分离子系统 - C# SQL分发子系统(ADO.NET,不支持EF) 这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况. 我们来看看这个子系 ...

  3. 12503 - Robot Instructions

      Robot Instructions  You have a robot standing on the origin of x axis. The robot will be given som ...

  4. 菜单工具栏wxPython菜单与工具栏基础示例

    这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...

  5. 将前台input中的数据异步传到后台并存入数据库

    将前台input中的数据异步传到后台并存入数据库 先看图: 利用ajax异步交互数据,并不是以json数组的形式将数据传到后台,而是利用字符数组的形式将其传到后台.动态新增每一行数据,将每一列对应的数 ...

  6. div、span

    1.Html区块元素 HTML可以通过<div>和<span>将元素组合起来 大多数HTML元素被定义为块级元素或内联元素, 而块级元素在浏览器显示时,通常会以新行来开始(或结 ...

  7. Dos.ORM Select查询 自定义列

    自定义列 .Select( p = >new{ test = p.id}) // 同sql 列名 as 新列名 如下是 自己在写代码的例子,查询,分页,where条件,排序 var where ...

  8. 360回归A股,周鸿祎来给BAT和小米添堵了

    排着队回国内上市的公司名单里,终于多了奇虎360的名字. 奇虎360今天宣布,公司董事会收到了来自董事长周鸿祎.中信证券及其附属公司.Golden Brick Capital Private Equi ...

  9. USACO 4.2 Drainage Ditches(网络流模板题)

    Drainage DitchesHal Burch Every time it rains on Farmer John's fields, a pond forms over Bessie's fa ...

  10. openstack-kilo--issue(十二)openstack-keystone和httpd服务同时占用35357和5000

    == Keystone service == openstack-keystone: inactive 如上面显示的状态:如果启动了httpd就不能很好的启动openstack-keystone服务, ...