1. 程式人生 > >python簡單的多人聊天室

python簡單的多人聊天室

剛開始學習python,寫了一個聊天室練練手。

Server.py

import socket,select,thread;

host=socket.gethostname()
port=5963
addr=(host,port)
     
inputs=[]
fd_name={}

def who_in_room(w):
    name_list=[]
    for k in w:
        name_list.append(w[k])
        
    return name_list

def conn():
    print 'runing'
    ss=socket.socket()
    ss.bind(addr)
    ss.listen(5)
    
    return ss

def new_coming(ss):
    client,add=ss.accept()
    print 'welcome %s %s' % (client,add)
    wel='''welcome into the talking room .
    please decide your name.....'''
    try:
        client.send(wel)
        name=client.recv(1024)
        inputs.append(client)
        fd_name[client]=name
        
        nameList="Some people in talking room, these are %s" % (who_in_room(fd_name))
        client.send(nameList)
        
    except Exception,e:
        print e
    
def server_run():

    ss=conn()
    inputs.append(ss)
    
    while True:
        r,w,e=select.select(inputs,[],[])
        for temp in r:
            if temp is ss:
                new_coming(ss)
            else:
                disconnect=False
                try:
                    data= temp.recv(1024)
                    data=fd_name[temp]+' say : '+data
                except socket.error:
                    data=fd_name[temp]+' leave the room'
                    disconnect=True
                    
                if disconnect:
                    inputs.remove(temp)
                    print data
                    for other in inputs:
                        if other!=ss and other!=temp:
                            try:
                                other.send(data)
                            except Exception,e:
                                print e                    
                    del fd_name[temp]
                    
                else:
                    print data
                    
                    for other in inputs:
                        if other!=ss and other!=temp:
                            try:
                                other.send(data)
                            except Exception,e:
                                print e
    
if __name__=='__main__':
    server_run()

client.py
import socket,select,threading,sys;

host=socket.gethostname()

addr=(host,5963)

def conn():
    s=socket.socket()
    s.connect(addr)
    return s

def lis(s):
    my=[s]
    while True:
        r,w,e=select.select(my,[],[])
        if s in r:
            try:
                print s.recv(1024)
            except socket.error:
                print 'socket is error'
                exit()
            
def talk(s):
    while True:
        try:
            info=raw_input()
        except Exception,e:
            print 'can\'t input'
            exit()
        try:
            s.send(info)
        except Exception,e:
            print e
            exit()
            
def main():
    ss=conn()
    t=threading.Thread(target=lis,args=(ss,))
    t.start()
    t1=threading.Thread(target=talk,args=(ss,))
    t1.start()
if __name__=='__main__':
    main()

執行時先啟動服務端。進入聊天室先起一個暱稱。服務端會向客戶端傳送當前聊天室內聊天人的列表。一個客戶端發出的訊息會通過服務端發給其他客戶端。

效果如下:


相關推薦

【181027】VC++簡單聊天原始碼

一個簡單的但支援多人同時聊天的VC++聊天室原始碼,支援私聊、支援真實IP相互傳送檔案,使用者名稱可以重複,當用戶進入聊天室時其它使用者會得到通知,伺服器端採用埠模型完成,客戶端採用WSAAynscSelect模型,底層採用xml對傳輸協議進行封裝。伺服器啟動後自動監聽客戶端是否執行,聊天過程中

Java通過Socket來實現簡單聊天

Socket可以實現網路上兩個程式通過雙向通道進行資料的交換,此外它是Java中網路TCP/IP協議的封裝,例如可以進行網路通訊等等,下面我們就來簡單寫一下多人聊天室。 首先來分析一下要實現的流程 首先建立一個伺服器端,構建ServerSocket並繫結埠 建立sock

python socket 聊天

2. [檔案] server.py ~ 2KB     下載(19)     # -*- coding: utf-8 -*- """ Created on Fri Oct 25 10:33:44 2013 @author: zbg """ import socket import sys import

Python網路程式設計----實現簡單聊天

還是用UDP,socket作為主體來實現,之前我們已經實現過單對單socket通訊,這次想實現群發功能 原理其實就是一臺伺服器在負責分配轉發資料,來達成廣播的效果,這些思路其實也差不多 但是多人聊天沒有這麼強的規整性,你可能沒等到A的訊息,就要去和B說話了,多執行緒就可以

python簡單聊天

剛開始學習python,寫了一個聊天室練練手。 Server.py import socket,select,thread; host=socket.gethostname() port=5963 addr=(host,port) inputs=[] fd_n

socket實現簡單聊天

服務端Server.java package chatDemo; import java.awt.BorderLayout; import java.io.DataInputStream; import java.io.DataOutputStream; import j

Python基於Socket實現簡易聊天

##前言 套接字(Sockets)是雙向通訊通道的端點。 套接字可以在一個程序內,在同一機器上的程序之間,或者在不同主機的程序之間進行通訊,主機可以是任何一臺有連線網際網路的機器。 套接字可以通過多種不同的通道型別實現:Unix域套接字,TCP,UDP等。 套接字型檔提供了處理公共傳輸的特定類,以及一個用於處

NIO 聊天

fig pin 仿真 all listen HR code cas ole 一前言 在家休息沒事,敲敲代碼,用NIO寫個簡易的仿真聊天室。下面直接講聊天室設計和編碼。對NIO不了解的朋友,推薦一個博客,裏面寫的很棒: https://javadoop.com/ 裏面

h5移動端聊天|仿微信界面聊天|h5聊天

dde ... html5開發 技術 show scrollby anim 世界 info 今年的FIFA世界杯甚是精彩,最近興致高漲就利用HTML5開發了一個手機端仿微信界面聊天室,該h5聊天室采用750px全新伸縮flex布局,以及使用rem響應式配合fontsize

基於tcp和線程的聊天-C語言

同時 reat 錯誤 con play 分享圖片 tdi %s 線程編程 之前在學習關於網絡tcp和多線程的編程,學了知識以後不用一下總絕對心虛,於是就編寫了一個基於tcp和多線程的多人聊天室。 具體的實現過程:   服務器端:綁定socket對象->設置監聽數-

Linux下基於Socket網絡通信的聊天

data break arp pre font linu print lose types.h 服務端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h>

1024_(即時通訊)使用node.js和socket.io實現聊天

使用node.js和socket.io實現多人聊天室 2015年01月24日 03:24:54 遠古大猛獁 閱讀數:2775 轉自: http://www.cnblogs.com/flyoung2008/archive/2012/07/19/2600132.html

Netty聊天

在簡單聊天室的程式碼中修改ChatServerHandler類,就可以模擬多人聊天的功能 package com.cppdy.server; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext;

基於flask框架,使用websocket實現聊天功能

後端程式碼:   # web_socket 的收發機制 # web_socket --> web + socket --> http協議 + socket # web_socket協議就是ws協議 # 基於flask框架為web_socket提供服務 from flas

Go語言專案實戰:聊天

功能需求 實現單撩 實現群撩 實現使用者上線的全網通知 實現使用者暱稱 實現聊天日誌的儲存和檢視 服務端實現 type Client struct { conn net.Conn name string addr string } var ( //

使用netty實現一個聊天--failed: Error during WebSocket handshake: Unexpected response code: 200

初次接觸netty , 本文主要內容如下: 遇到的小bug 聊天室後端程式碼: 聊天室前端程式碼: 遇到的小bug 在使用netty進行websocket程式設計(實現一個簡單的聊天室)時,我遇到了這樣一個奇怪

Java簡易聊天(cmd下執行)

思路: 1.首先建立伺服器監聽 ServerSocket server = new ServerSocket(5000); 監聽某個指定埠號是否有連線請求 2.客戶端發起請求,也就是new了一個Socket socket = new Socket(host,port); 想某個指定埠號發起請

【tcp-ip學習總結】基於udp的聊天,帶有登入註冊功能

環境;vs2010,vs2013 伺服器端 #include<stdio.h> #include<Winsock2.h> #include<stdlib.h> #pragma comment(lib,"Ws2_32

Android聊天小專案

多人聊天室小專案筆記(APP客戶端) 這兩天自己寫了一個多人聊天室,伺服器是用Java寫的,爛的一批,不想寫了,但是安卓客戶端上遇到了很多問題還是有必要說一下。 1、功能 這個APP客戶端是基於我自己寫的伺服器來執行的,不過有需要的夥伴可以根據自己的需

c++網路通訊聊天Server端執行程式碼,及小白的學習情況和經驗總結

c++網路通訊多人聊天室Server端 一、描述 1> 採用c++語言 2>編譯環境是vs2015 3>使用的是阻塞式套接字 二、功能描述 1>一個伺服器對多個客戶端 2>通過廣播的方式使得客戶端與伺服器端都能夠接收到彼此的訊息 3>伺