zoukankan      html  css  js  c++  java
  • socket编程之TCP/UDP

    目标:

      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.
    ")
            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
    ' % 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
    " %(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
    ' %(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
    " % 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()

    •运行代码,测试效果

  • 相关阅读:
    sql基础笔记备忘
    论坛---挂掉的思考
    http response
    跑步肋骨下方疼
    Golang
    svn rollback: 恢复到上一版本
    中国时区
    crontab
    初识redis
    siege
  • 原文地址:https://www.cnblogs.com/xkops/p/6290527.html
Copyright © 2011-2022 走看看