zoukankan      html  css  js  c++  java
  • Python socket聊天室!

    这篇文章是copy的,我自己写的不能把每个人发送的数据在别人的屏幕上显示!先把他的保存在我这里看下!

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 import socket
     5 import sys
     6 import threading
     7  
     8 con = threading.Condition()
     9 HOST = raw_input("input the server's ip adrress: ") # Symbolic name meaning all available interfaces
    10 PORT = 8888 # Arbitrary non-privileged port
    11 data = ''
    12  
    13 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    14 print 'Socket created'
    15 s.bind((HOST, PORT))
    16 s.listen(10)
    17 print 'Socket now listening'
    18  
    19 #Function for handling connections. This will be used to create threads
    20 def clientThreadIn(conn, nick):
    21     global data
    22 #infinite loop so that function do not terminate and thread do not end.
    23     while True:
    24     #Receiving from client
    25         try:
    26             temp = conn.recv(1024)
    27             if not temp:
    28                 conn.close()
    29                 return
    30             NotifyAll(temp)
    31             print data
    32         except:
    33             NotifyAll(nick + " leaves the room!")
    34             print data
    35             return
    36  
    37     #came out of loop
    38  
    39 def NotifyAll(sss):
    40     global data
    41     if con.acquire():
    42         data = sss
    43         con.notifyAll()
    44         con.release()
    45   
    46 def ClientThreadOut(conn, nick):
    47     global data
    48     while True:
    49         if con.acquire():
    50             con.wait()
    51             if data:
    52                 try:
    53                     conn.send(data)
    54                     con.release()
    55                 except:
    56                     con.release()
    57                     return
    58                      
    59  
    60 while 1:
    61     #wait to accept a connection - blocking call
    62     conn, addr = s.accept()
    63     print 'Connected with ' + addr[0] + ':' + str(addr[1])
    64     nick = conn.recv(1024)
    65      #send only takes string
    66     #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
    67     NotifyAll('Welcome ' + nick + ' to the room!')
    68     print data
    69     print str((threading.activeCount() + 1) / 2) + ' person(s)!'
    70     conn.send(data)
    71     threading.Thread(target = clientThreadIn , args = (conn, nick)).start()
    72     threading.Thread(target = ClientThreadOut , args = (conn, nick)).start()
    73  
    74 s.close()

    下面的是客户端代码:

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 import socket
     5 import threading
     6  
     7  
     8 inString = ''
     9 outString = ''
    10 nick = ''
    11  
    12 def DealOut(s):
    13     global nick, outString
    14     while True:
    15         outString = raw_input()
    16         outString = nick + ': ' + outString
    17         s.send(outString)
    18  
    19 def DealIn(s):
    20     global inString
    21     while True:
    22         try:
    23             inString = s.recv(1024)
    24             if not inString:
    25                 break
    26             if outString != inString:
    27                 print inString
    28         except:
    29             break
    30          
    31  
    32 nick = raw_input("input your nickname: ")
    33 ip = raw_input("input the server's ip adrress: ")
    34 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    35 sock.connect((ip, 8888))
    36 sock.send(nick)
    37  
    38 thin = threading.Thread(target = DealIn, args = (sock,))
    39 thin.start()
    40 thout = threading.Thread(target = DealOut, args = (sock,))
    41 thout.start()
    42  
    43 #sock.close()
  • 相关阅读:
    java 多线程 CountDownLatch用法
    android的消息处理机制(图+源码分析)——Looper,Handler,Message
    Handler 总结
    Android常用UI编程_TextView实现跑马灯效果
    Android常用UI编程_TextView实现Activity转变
    Android常用UI编程_TextView显示图片和文字(包含超链接)
    Http编程 ___ 1
    Iterator用法
    增强型for循环
    Android_文件下载
  • 原文地址:https://www.cnblogs.com/114811yayi/p/5530287.html
Copyright © 2011-2022 走看看