目标:

  1.编写TCP服务端客户端,实现客户端发送数据,服务端接收打印

  2.采用OOP方式编写TCP服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端

  3.采用OOP方式编写UDP服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端。

1.编写TCP服务端客户端,实现客户端发送数据,服务端接收打印

服务端代码如下:

[root@localhost python]# cat tcpserver.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- import socket host = ''
port = 8888
addr = (host,port) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1) while True:
try:
cli_sock, cli_addr = s.accept()
except KeyboardInterrupt:
break
print "Client Connected From: ", cli_addr
while True:
cli_sock.send("I See You.\n")
data = cli_sock.recv(1024)
if not data.strip():
break
print data cli_sock.close()
s.close()

客户端代码如下:

[root@localhost python]# cat tcpclient.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- import socket host = ''
port = 8888
addr = (host, port) c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(addr) while True:
print c.recv(1024),
data = raw_input("> ")
if not data.strip():
break
c.send('%s\n' % data) c.close()

•运行代码,测试效果

2.采用OOP方式编写TCP服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端

服务端代码如下:

[root@localhost python]# cat tcptimeserv.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- import socket
import time class TcpTimeServ(object):
def __init__(self, host, port):
self.addr = (host, port)
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.s.bind(self.addr)
self.s.listen(1) def handle_child(self, c_sock):
while True:
data = c_sock.recv(1024)
if not data.strip():
break
c_sock.send("[%s] %s\n" %(time.ctime(), data)) def mainloop(self):
while True:
try:
cli_sock, cli_addr = self.s.accept()
except KeyboardInterrupt:
break
print "Client Connected From: %s", cli_addr
self.handle_child(cli_sock)
cli_sock.close()
self.s.close() if __name__ == "__main__":
tcpserv = TcpTimeServ('0.0.0.0', 8888)
tcpserv.mainloop()

客户端代码如下:

[root@localhost python]# cat tcptimecli.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- import socket
import sys class TcpTimeCli(object):
def __init__(self, host, port):
self.addr = (host, port)
self.c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.c.connect(self.addr) def mainloop(self):
while True:
data = raw_input("> ").strip()
if not data:
break
self.c.send("%s" % data)
print self.c.recv(1024)
self.c.close() if __name__ == "__main__":
host = sys.argv[1]
port = int(sys.argv[2])
tcpcli = TcpTimeCli(host, port)
tcpcli.mainloop()

•运行代码,测试效果

3.采用OOP方式编写UDP服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端。

服务端代码如下:

[root@localhost python]# cat udpserver.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- import socket
import time class UdpServ(object):
def __init__(self, host, port):
self.addr = (host, port)
self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.s.bind(self.addr) def mainloop(self):
while True:
data, cli_addr = self.s.recvfrom(1024)
data = data.strip()
self.s.sendto('[%s] %s\n' %(time.ctime(), data), cli_addr)
self.close() if __name__ == "__main__":
host = ''
port = 8888
udpserv = UdpServ(host, port)
udpserv.mainloop()

客户端代码如下:

[root@localhost python]# cat udpclient.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- import socket
import sys class UdpCli(object):
def __init__(self, host, port):
self.addr = (host, port)
self.c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def mainloop(self):
while True:
data = raw_input("> ").strip()
if not data:
break
self.c.sendto("%s\n" % data, self.addr)
print self.c.recvfrom(1024)[0]
self.c.close() if __name__ == "__main__":
host = sys.argv[1]
port = int(sys.argv[2])
udpcli = UdpCli(host, port)
udpcli.mainloop()

•运行代码,测试效果

socket编程之TCP/UDP的更多相关文章

  1. 网络编程之TCP/UDP及其流程比较(转)

    TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式TCP保证数据正确性,UDP可能丢包TCP保证数据顺序,UDP不保证 具体编程 ...

  2. 4.Java网络编程之TCP/UDP

    常见传输协议: UDP , TCP UDP协议:    特点:         1.将数据及源和目的封装成数据包中,不需要建立连接         2.每个数据包的大小限制在64K内         ...

  3. linux socket编程之TCP与UDP

    转:http://blog.csdn.net/gaoxin1076/article/details/7262482 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制 ...

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

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

  5. Linux系统编程(30)—— socket编程之TCP/IP协议

    在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计算机使用者意识到,计算机 ...

  6. Socket 编程之 TCP 实现

    前几天介绍了计算机网络的一些概念,并介绍了几个协议.下面就说说 Java 中的 Socket 编程,服务器和客户端是如何通信的呢? 首先要介绍一下 Socket ,我们知道在 TCP/IP 协议簇中, ...

  7. Linux系统编程(35)—— socket编程之TCP服务器的并发处理

    我们知道,服务器通常是要同时服务多个客户端的,如果我们运行上一篇实现的server和client之后,再开一个终端运行client试试,新的client就不能能得到服务了.因为服务器之支持一个连接. ...

  8. Linux系统编程(33)—— socket编程之TCP程序的错误处理

    上一篇的例子不仅功能简单,而且简单到几乎没有什么错误处理,我们知道,系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息. 为使错误处理的代码不影 ...

  9. Linux系统编程(34)—— socket编程之TCP服务器与客户端的交互

    前面几篇中实现的client每次运行只能从命令行读取一个字符串发给服务器,再从服务器收回来,现在我们把它改成交互式的,不断从终端接受用户输入并和server交互. /* client.c */ #in ...

随机推荐

  1. 企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)

    之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并无太多能力和机会对TOGAF进行理论和实际的联系,仅可对标准的文本 ...

  2. C#单例模式的三种写法 以及 继承面试题

    1.没有考虑线程安全 public class Singleton { private static Singleton _instance = null; private Singleton(){} ...

  3. Object-c学习之路五(@protocol协议)

    今天模拟Button的delegate来联系一下protocol. Button类 // Button.h // Protocal // // Created by WildCat on 13-7-2 ...

  4. Windows Socket 组件 HP-Socket v2.2.3

    高性能 Windows Socket 组件 HP-Socket v2.2.3 正式发布 HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和 ...

  5. 目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的选择

    目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的选择 ASP.NET Web API能够根据请求激活目标HttpController ...

  6. Java 快速开发平台 WB 6.8 发布

    WebBuilder是一款开源的可视化Web应用开发和运行平台. 基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发: 高效.稳定和可扩展的特点,适合复杂企业 ...

  7. LESS编译方案

    我的LESS编译方案 2013-08-07 10:22 by 逆风之羽, 469 阅读, 2 评论, 收藏, 编辑 背景 近期项目前端决定使用less,简单介绍一下,详细信息有兴趣查看官方文档(htt ...

  8. BOOST中read_some和 boost::asio::error::eof(2)错误

    当socket读写完成调用回调函数时候一定要检查 是不是有EOF错误,如果有那么好了,另一方已经断开连接了别无选择,你也断开把.   for (;;) { boost::array < char ...

  9. Linux kernel中网络设备的管理

    kernel中使用net_device结构来描述网络设备,这个结构是网络驱动及接口层中最重要的结构.该结构不仅描述了接口方面的信息,还包括硬件信息,致使该结构很大很复杂.通过这个结构,内核在底层的网络 ...

  10. MySQL SET TRANSACTION 设置事务隔离级别

    1. 首先说一下autocommit 默认情况下autocommit的开关是打开的,也就是ON,查看方法 方法1. select @@[global/session].autocommit; 方法2. ...