zoukankan      html  css  js  c++  java
  • Python socket (单线程)

     1 client, 客户端 code :
     2 
     3     客户端主要方法, s.send();   s.sendall();   s.recv();   s.connect()
     4 
     5 class Client(object):
     6 
     7   def __init__(self, ip, PortNo=XXX):
     8       self.ip = ip
     9       self.PortNo = PortNo
    10 
    11   def connect_socket(self):
    12       count = 1
    13       status = 0
    14       while count < 6 and status == 0:                                                                      # 尝试5次 在 ip::PortNo 上创建socket 链接.
    15           print ("Attempt %s time(s) to open socket port" % count)
    16           try:
    17               self.soct = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                                 # 定义socket 类型(TCP)
    18           except socket.error, e:                                                                           # socket error 异常处理, 这里把异常catch住,代码可以继续运行. 函数结尾返回一个函数运行结果标志位,供main函数或者调用函数判断.
    19               print ("error occur during creating socket: : %s" % e)
    20           try:
    21               self.soct.connect((self.ip, self.PortNo))
    22               status = 1
    23               print ("Socket opened success:  %s :: %s" % (self.ip, self.PortNo))
    24           except socket.error, e:                                                                           # 常见 socket error 有 目标地址错误,PortNo 被占用, 防火墙 等原因
    25               print ("Address or port related error detected during connect to server: : %s" % e)
    26               count += 1
    27               time.sleep(3)
    28       if status == 0:
    29           return False
    30       return True                                                                                           # 返回函数运行结果
    31 
    32
    
    
     1   Client 端发消息
     2   
     3   while True:
     4       cmd = raw_input("respond")
     5       if cmd == "exit":
     6           break
     7       elif len(cmd) == 0:
     8           continue
     9       s.send(cmd)
    10       date = s.recv(1024)
    11       print ("rec:",date)
     1  server, 服务端code,
     2 
     3      服务端主要方法, s.recv();   s.send();   s.sendall();    s.bind();   s.close()
     4 
     5  class Server(object):
     6  def __init__(self, ip, PortNo=XXX):
     7      self.ip = ip
     8      self.PortNo = PortNo
     9  def run_server(self):
    10    self.soct = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                                            # 定义socket 类型(TCP)
    11    self.scot.bind((self.ip,self.PortNo))
    12     self.soct.listen(1)                                                                                      # socket 监听的数量.
    13    conn,addr = self.soct.accept()                                                                           # 接受 scoket 链接请求.
    14     print("Socket has been established with %s :: %s" % (conn,addr))
    15    while True:
    16      data_r = self.soct.recv(1024)                                                                         # 从socket 上接受数据
    17          if not data_r:
    18              break                                                                                            #若已连接的client端断开,退出
    19      print("Received %s from socket" % data_r)
    20      self.soct.sendall("data_s")                                                                           # 向socket 发送数据
    21        print("Send data %s to socket" % data_s)  
    22   self.soct.close()                                                                                         # 结束所建立的 socket 方法.


  • 相关阅读:
    回溯法之图的着色问题
    回溯法基本思想
    L2-006 树的遍历
    P1540 机器翻译
    P1067 多项式输出
    C++STL之map映照容器
    C++STL之multiset多重集合容器
    C++STL之set集合容器
    C++之string基本字符系列容器
    C++STL之vector向量容器
  • 原文地址:https://www.cnblogs.com/zzyzz/p/5581503.html
Copyright © 2011-2022 走看看