@原文url:http://www.cnblogs.com/GarfieldTom/archive/2012/12/16/2820143.html

1,UDP通讯:

(1),Server(服务端ip:192.168.222.128):

import socket
port=8081
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#从指定的端口,从任何发送者,接收UDP数据
s.bind(('',port))
print('waiting connect...')
while True:
    #接收一个数据
    data,addr=s.recvfrom(1024)
    print('Received:',data,'from',addr)
---运行效果如下,在debian命令行下启动python程序:

 接收到数据后的效果如下:

 

(2),Client(客户端ip:192.168.222.1):

import socket
port=8081   #目标服务器的端口
#host='localhost'    #这里指的是本机
host='192.168.222.128' #这里host是发送目标服务器的ip
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto(b'hello,this is a test info !',(host,port))

2,下面是TCP方式:

(1),Server:

#-*- coding: utf-8 -*-
from socket import *
from time import ctime
from time import localtime
import time

HOST=''
PORT=1122  #设置侦听端口
BUFSIZ=1024
ADDR=(HOST, PORT)
sock=socket(AF_INET, SOCK_STREAM)

sock.bind(ADDR)

sock.listen(5)
#设置退出条件
STOP_CHAT=False
while not STOP_CHAT:
    print('等待接入,侦听端口:%d' % (PORT))
    tcpClientSock, addr=sock.accept()
    print('接受连接,客户端地址:',addr)
    while True:
        try:
            data=tcpClientSock.recv(BUFSIZ)
        except:
            #print(e)
            tcpClientSock.close()
            break
        if not data:
            break
        #python3使用bytes,所以要进行编码
        #s='%s发送给我的信息是:[%s] %s' %(addr[0],ctime(), data.decode('utf8'))
        #对日期进行一下格式化
        ISOTIMEFORMAT='%Y-%m-%d %X'
        stime=time.strftime(ISOTIMEFORMAT, localtime())
        s='%s发送给我的信息是:%s' %(addr[0],data.decode('utf8'))
        tcpClientSock.send(s.encode('utf8'))
        print([stime], ':', data.decode('utf8'))
        #如果输入quit(忽略大小写),则程序退出
        STOP_CHAT=(data.decode('utf8').upper()=="QUIT")
        if STOP_CHAT:
            break
tcpClientSock.close()
sock.close()

(2),Client:

#-*- coding: utf-8 -*-
from socket import *

class TcpClient:
    #测试,连接本机
    HOST='127.0.0.1'
    #设置侦听端口
    PORT=1122 
    BUFSIZ=1024
    ADDR=(HOST, PORT)
    def __init__(self):
        self.client=socket(AF_INET, SOCK_STREAM)
        self.client.connect(self.ADDR)

        while True:
            data=input('>')
            if not data:
                break
            #python3传递的是bytes,所以要编码
            self.client.send(data.encode('utf8'))
            print('发送信息到%s:%s' %(self.HOST,data))
            if data.upper()=="QUIT":
                break            
            data=self.client.recv(self.BUFSIZ)
            if not data:
                break
            print('从%s收到信息:%s' %(self.HOST,data.decode('utf8')))
            
            
if __name__ == '__main__':
    client=TcpClient()

。。。

posted on 2014-05-13 12:13  学到老死  阅读(181)  评论(0编辑  收藏  举报