@1: 同步网络编程(也就是阻塞方式)

同步网络编程一次只能连接一个客户端。

Server端:

import socket

def debugPrint(name, value):
print("{0}: {1}".format(name, value)) def server():
#1:
server = socket.socket()
#NOTE: NOT "host = server.gethostname()"
host = socket.gethostname()
port = 8080
#2:
#NOTE: NOT "server.bind(host, port)" TypeError: bind() takes exactly one argument (2 given)
server.bind((host, port))
#3:
server.listen(3) #listen()的参数为允许等待的连接数
while 1:
#4:
client, address = server.accept() #accept()会阻塞,直到有客户端连接
debugPrint("client", client)
debugPrint("address", address)
#5:
client.send("Welcome!")
client.close() def main():
server()

Client端:

import socket
import server def client():
#1:
client = socket.socket()
host = socket.gethostname()
port = 8080
#2:
client.connect((host, port))
#3:
content = client.recv(1024)
server.debugPrint("From Server", content) def main():
client()

@2: 异步网络编程(也就是非阻塞方式)

异步网络编程, 允许多个客户端链接。

异步网络编程有3种实现方法: 分叉(多进程), 多线程,异步IO

分叉方式占据资源,windows不支持分叉; 多线程方式存在同步问题;

最新文章

  1. innodb 锁分裂继承与迁移
  2. 关于 Lua 内存泄漏的检测
  3. UCOS 请求任务删除函数 及其应用
  4. Ubuntu Crontab
  5. C语言char s[] 和 char *s的差别
  6. Android开展:ADT+Eclipse使用错误:Text editor does not have a document provider
  7. clone()方法、深复制和浅复制
  8. 从.Net版本演变看String和StringBuild性能之争
  9. Zeroc Ice开发环境搭建
  10. scala_2
  11. 61.H5---利用canvas+原生js进行鼠标跟随绘图
  12. Asp.Net MVC+EF+三层架构
  13. Redis入门的简单使用
  14. python(Django之Logging、API认证)
  15. Java面试总结(集合、spring)
  16. 从网上整理的一些delphi字符串加密解密方法
  17. t959 unknown device 解决办法
  18. 教你用PS修复老照片
  19. Notes of Daily Scrum Meeting(11.4)
  20. 【转】利用HTML5开发Android

热门文章

  1. maven+nexus setting.xml配置(收藏)
  2. C++11 中function和bind以及lambda 表达式的用法
  3. AJAX防止多次请求
  4. 【PM面试题】请设计一个老年人用的新闻App
  5. Tensorflow之计算tensor平均值
  6. Yii2 选择布局的方式
  7. Unity3D入门其实很简单
  8. django数据库读写分离,分库
  9. 解决WAS更新web.xml文件不生效的问题(web_merged.xml是罪魁祸首)
  10. python 的时间复杂度