在上篇文章中,仅仅讲述了如何进行了TCP编程,在本章中,将讲述使用udp进行编码,先看如下的代码,服务器端:

root@python 513]# cat serverudp.py
#!/usr/bin/env python from socket import * HOST = '192.168.1.60'
PORT = 9999 s = socket(AF_INET,SOCK_DGRAM)
s.bind((HOST,PORT))
print '...waiting for message..'
while True:
data,address = s.recvfrom(1024)
print data,address
s.sendto('this is the UDP server',address)
s.close()

在上述的代码中,只要收到了客户端的请求,那么就会返回固定的话,在创建的时候,只要使用SOCK_DGRAM即可创建udp的连接,在设置的时候,只要绑定地址和端口即可。

客户端代码如下:

#!/usr/bin/env python

from socket import *

HOST='192.168.1.60'
PORT=9999 s = socket(AF_INET,SOCK_DGRAM)
s.connect((HOST,PORT))
while True:
message = raw_input('send message:>>')
s.sendall(message)
data = s.recv(1024)
print data
s.close()

在客户端代码,就是直接连接,然后发送数据,接收数据即可。

具体的tcp和udp的对比如下:

1、 tcp是面向连接的,而udp是无连接,在服务器端的反应就是,tcp需要做很多的设置工作,例如要进行监听listen,然后监听之后,进行接收客户端的连接,也就是accept,当接收到连接之后,传递过来的是客户端的socket对象,然后利用这个socket对象进行发送接收消息。而在udp中,不需要设置这些,只要绑定了地址和端口即可,在接收数据之后,得到客户端的地址和端口,然后服务器端的udp对象将信息发送到对应的地址。

2、在传输数据的方面,tcp是安全的,会将大量的数据进行分块然后进行发送,不会造成数据丢失;而在udp中,发送多少,接收多少就是多少,不会讲数据进行分块,是将数据作为一个包发送,至于客户端能接收到多少数据是不管的

3、tcp在这个时候是阻塞连接的,也就是同时只有一个进行连接,而在udp中,可以进行很多连接,主要就是根据地址来进行返回相关的信息

socket简介:

套接字的主要设计目标是为了进程间的通信,从而就有了地址家族的AF_UNIX,是基于文件型的通信,也称之为IPC,inter process cominication,其实到后来,越来越多用到的是基于网络的套接字,从而就有了地址家族的AF_INET。

而在其中的协议分之为tcp和udp,在tcp中称之为流,也就是SOCK_STREAM,在udp中称之为数据报,也就是SOCK_DGRAM,其实也就是datagram。

一些方法的介绍:

1、 服务端方法

s.bind|()   进行绑定地址和端口

s.listen()  进行监听

s.accept() 监听--返回连接的socket对象和连接的客户端地址

2、 客户端方法

s.connet((address.port))

3、发送数据方法

s.send(string) 主要用在tcp

s.sendall(string) 主要用在tcp

s.sendto(string,address)主要用在udp根据地址发送

4、接收数据方法

s.recv(1024) 主要用在tcp表示接收到1024个字节的数据

s.recvfrom(1024) 主要用在udp,得到参数为数据和地址,从而可以根据地址返回消息

在接收数据的时候,1024称之为缓冲区的数据,然而暂时并不懂啥是缓冲区,暂时保留此问题

最新文章

  1. 突如其来的"中断异常",我(Java)该如何处理?
  2. 微软Microsoft开源历程与相关资源
  3. ubuntu 13.04下MYSQL 5.5环境搭建
  4. mysql-异常Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
  5. Parallel Computing–Cannon算法 (MPI 实现)
  6. One Night Ultimate Werewolf Daybreak
  7. Win7启动修复(Ubuntu删除后进入grub rescue的情况)
  8. MVC ActionResult JsonResult
  9. sublime代码片段功能
  10. Spark 中的join方式(pySpark)
  11. 初始Android-配置环境
  12. 管理启示,不起毛的鹦鹉——leo锦书54
  13. Windows Phone开发(4):框架和页
  14. Android在第三方应用程序系统应用尽早开始,杀死自己主动的第三方应用程序,以重新启动
  15. 5. UITest测试总结
  16. Ubuntu 16.04 Java8 安装
  17. TCP/IP学习20180701-数据链路层-IP子网寻址
  18. 提交操作自动遮蔽实现之ajax
  19. 使用MultipartFile上传文件
  20. 自动清理MySQL binlog日志

热门文章

  1. Swift UITextField各种属性的设置
  2. 关于Django的core first 、db first
  3. PCA最小平方误差理论推导
  4. threejs Object的点击(鼠标)事件(获取点击事件的object)
  5. CentOS 7.4中firewall防火墙详解和配置以及切换为iptables防火墙
  6. mfc 鼠标、键盘响应事件
  7. 《DSP using MATLAB》示例9.1
  8. Android模糊图像
  9. ecmall 2.3.0 最新补丁20140618
  10. python自动发送邮件