socket编程之TCP/UDP

目标:

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

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

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

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

服务端代码如下:

[[email protected] 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()

客户端代码如下:

[[email protected] 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服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端

服务端代码如下:

[[email protected] 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()

客户端代码如下:

[[email protected] 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服务端客户端,实现客户端发送数据,服务端添加时间戳,返回给客户端。

服务端代码如下:

[[email protected] 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()

客户端代码如下:

[[email protected] 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()

?运行代码,测试效果

时间: 2024-12-23 23:06:16

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

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

TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式TCP保证数据正确性,UDP可能丢包TCP保证数据顺序,UDP不保证 具体编程时的区别 socket()的参数不同 UDP Server不需要调用listen和accept UDP收发数据用sendto/recvfrom函数 TCP:地址信息在connect/accept时确定UDP:在sendto/recvfrom函数中每次均 需指定地址信息 UDP:shutdown函数无

计算机网络Socket编程之TCP协议

>TCP协议位于传输层,是一种面向连接的可靠的传输协议 >socket(套接字):是IP地址与端口号的统称 >套接字的基本结构 struct sockaddr   这个结构用来存储套接字地址 结构体的定义 struct sockaddr { unsigned short sa_family; /* address族, AF_xxx */ har sa_data[14]; /* 14 bytes的协议地址 */ }; sa_family    一般来说,都是"AFINET&quo

4.Java网络编程之TCP/UDP

常见传输协议: UDP , TCP UDP协议:    特点:         1.将数据及源和目的封装成数据包中,不需要建立连接         2.每个数据包的大小限制在64K内         3.因无连接,是不可靠协议         4.不需要建立连接,速度快 举例:比如你向家里邮寄一个包裹,无论家里此时是否有人,都会发送.当快递员发送到你家时,如果有人,家里人就收到了包裹,如果家里此时没有人,包裹(数据包)就被丢弃了. 自我理解: 当我们建立连接后,你说了一句:"你吃过饭了么?&qu

Java Socket编程之TCP

基于TCP的Socket通信: 服务器端: 创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 调用accept()方法开始监听,等待客户端的连接 连接建立后,通过输入流读取客户发送的请求信息 通过输出流向客户端发送响应信息 关闭相关资源 客户端: 创建客户端Socket,指定服务器地址和端口 连接建立后,通过输出流,向服务器端发送信息 获取输入流,并读取服务器端的响应信息 关闭资源 例:服务器端: import java.io.BufferedReader;

【Unity3D自学记录】网络编程之TCP&UDP的区别

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次"对话"才能建立起来,其中的过程非常复杂,我们这里只做简单.形象的介绍,你只要做到能够理解这个过程即可.我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:"我想给你发数据,可以吗?",这是第一次对话:主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在

网络编程之TCP编程

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

[深入浅出WP8.1(Runtime)]Socket编程之UDP协议

13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只传送少量数据.对可靠性要求不高的应用环境.既然 UDP 是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用.因为UDP具有TCP所望尘莫及的速度优势.虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受

socket编程之二:两种链接类型upd和upd

前面一篇文章说到了一些计算机网络的基础知识,引入了socket,从这节开始,就进入正题了. 一 概率 TCP:Transimission Control Protocol传输控制协议. UPD:User Datagram Protocol用户数据包协议. 两者都属于上一篇文章说的OSI模型中的第四层--传输层的协议. 两者相比: TCP协议面向连接,UDP协议面向非连接:(链接) TCP协议传输速度慢,UDP协议传输速度快:(速度) TCP有丢包重传机制,UDP没有:(重传) TCP协议保证数据

PHP Socket 编程之9个主要函数的使用之测试案例

php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络服务的客户端和服务端,这和mysql的客户端和服务端是一样的,你只要理解mysql的客户端和服务端是怎么一回事,你就应该能够理解下面我要讲的东西吧. 关于socket编程所涉及到的网络协议,什么TCP啊,UDP啊,什么socket三次握手等等,这些网络协议网上有很详细的解释,这里不讲,只截个sock