python的socket编程之udp编程
在上篇文章中,仅仅讲述了如何进行了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称之为缓冲区的数据,然而暂时并不懂啥是缓冲区,暂时保留此问题
python的socket编程之udp编程的更多相关文章
- [深入浅出WP8.1(Runtime)]Socket编程之UDP协议
13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...
- 网络编程之UDP编程
网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...
- Java Socket编程之UDP
UDP编程: 将要传输的数据定义成数据包(Datagram),在数据报中指明所要到达的Socket(主机地址和端口号),然后再将数据报发送出去. 相关操作类: DatagramPacket ...
- C#编程 socket编程之udp服务器端和客户端
基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低.至于可靠性,可通过应用层的控制来满足.(不可靠连接) 使用Udp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) ...
- Linux系统编程(37)—— socket编程之UDP服务器与客户端
典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...
- Linux系统编程(36)—— socket编程之UDP详解
UDP 是User DatagramProtocol的简称,中文名是用户数据报协议.UDP协议不面向连接,也不保证传输的可靠性,例如: 1.发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协 ...
- 【Linux】Linux C socket 编程之UDP
发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...
- Java网络编程之UDP
Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...
- PHP Socket 编程之9个主要函数的使用之测试案例
php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络 ...
随机推荐
- 高德地图 Android编程中 如何设置使 标记 marker 能够被拖拽
由于本人对智能手机真心的不太会用,我本人大概是不到3年前才买的智能手机,用以前的索尼爱立信手机比较方便小巧,平时学习工作打个电话发个短信也就够了,出去吃饭一般都是朋友拿手机去弄什么美团团购啥的,然后我 ...
- cocos2d-x 发布win32 release版本后找不到msvcr110.dll
解决方法: 安装Visual C++ Redistributable for Visual Studio 2012 //下载地址 http://www.microsoft.com/zh-CN/down ...
- C# 速编神器LinqPad(新版5.25)
点此下载5.25 (支持.net4.6,有调试器)(页面有广告,一直点免费下载即可)(可用)密码 lp123456 批处理如下. @echo off start /b LINQPad.exe -n ...
- BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*
BZOJ4543 POI2014 Hotel加强版 Description 同OJ3522 数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 ...
- 论坛源码推荐(11.6):iPhone6/6 plus屏幕适配Demo,Java代码转Objective-C
http://www.cocoachina.com/ios/20141106/10153.html iPhone6/6 plus 屏幕适配Demo(代码底层处理)(论坛会员satian)htt 该项目 ...
- asp.net远程调用WebService的两种方法(转载)
一,静态方法在“解决方案‘项目名’” -> 相应的文件夹,如“Web References” ->右键“添加WEB引用”->在URL里写入地址.二,动态方法在“解决方案‘项目名’” ...
- gradle 构建包含源码配置
参考配置: apply plugin: "idea" apply plugin: "groovy" apply plugin: "eclipse&qu ...
- Python笔试面试题_牛客(待完善)
中文,免费,零起点,完整示例,基于最新的Python 3版本.https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42 ...
- 安装sphinx报错(undefined reference to `libiconv_open' 、undefined reference to `libiconv'、undefined reference to `libiconv_close'、make[1]: *** No rule to make target `all'. Stop. 、make: *** [all-recursive
(为知笔记copy过来格式有变,希望对遇到此问题的童鞋有帮助) 具体错误: Thank you for choosing Sphinx! [root@vm-vagrant csft-4.1]# mak ...
- SmtpClient发送邮件
使用第三方SMTP服务器来发送邮件.如网易: SmtpClient sc = new SmtpClient("smtp.126.com"); sc.Credentials = ne ...