Python开发一个socket的C/S结构的聊天室应用

服务端:

#!/usr/bin/env python

#coding:utf8

import socket,select

def broadcast_data (sock,message):

for socket in conn_list:

if socket != server_socket and socket != sock :

try :

socket.send(message)

except :

socket.close()

conn_list.remove(socket)

if __name__ == "__main__":

conn_list = []

recv_buffer = 4096

PORT = 9999

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #端口重用,可选

server_socket.bind(('', PORT))

server_socket.listen(99)

conn_list.append(server_socket)

print "Chat server started on port " + str(PORT)

while 1:

read_sockets,write_sockets,error_sockets = select.select(conn_list,[],[])

for sock in read_sockets:

#新建连接

if sock == server_socket:

sockfd, addr = server_socket.accept()

conn_list.append(sockfd)

print "Client (%s, %s) connected" % addr

broadcast_data(sockfd, "[%s:%s] entered room\n" % addr)

#进入聊天室

else:

try:

data = sock.recv(recv_buffer)

if data:

broadcast_data(sock, "\r" + ' ' + data)

except:

broadcast_data(sock, "Client (%s, %s) is offline" % addr)

print "Client (%s, %s) is offline" % addr

sock.close()

conn_list.remove(sock)

continue

server_socket.close()

客户端:

#!/usr/bin/env python

#coding:utf8

import socket,select,string,sys

def prompt() :

sys.stdout.write(' ')

sys.stdout.flush()

if __name__ == "__main__":

if(len(sys.argv) < 3) :

print 'Usage : python chat_client.py hostname port'

sys.exit()

HOST = sys.argv[1]

PORT = int(sys.argv[2])

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.settimeout(2)

try :

s.connect((HOST, PORT))

except :

print 'Unable to connect'

sys.exit()

print 'Connected to remote host. Start sending messages'

prompt()

while 1:

socket_list = [sys.stdin, s]

read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])

for sock in read_sockets:

if sock == s:

data = sock.recv(4096)

if not data :

print '\nDisconnected from chat server'

sys.exit()

else :

sys.stdout.write(data)

prompt()

else :

msg = sys.stdin.readline()

s.send(msg)

prompt()

linux聊天python_Python socket C/S结构的聊天室应用相关推荐

  1. Linux 网络编程——socket 网络编程

    文章目录 一.网络基础 TCP/UDP对比 TCP/IP协议族体系 socket IP地址 IP地址转化API inet_addr() inet_aton() inet_ntoa() inet_pto ...

  2. linux C语言 socket编程教程(附两个例子)(socket教程)

    文章目录 1.网络中进程之间如何通信? 2.什么是Socket? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 网络字节序与主机字节序 3.3.listen(). ...

  3. Linux下的socket演示程序

    和C语言教程一样,我们从一个简单的"Hello World!"程序切入 socket 编程. 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client. ...

  4. Linux中网络通信中 使用的结构体

    "+++++++++++++++++++++++++ Linux TCP/UDP通信中的结构体 +++++++++++++++++++++++++++++++++++++++" s ...

  5. 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)

    最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...

  6. java socket实现的简易的聊天工具demo

    这是一个使用原生java socket实现的简易的聊天工具demo, 界面使用java swing 界面如下: ---------- 项目目录结构 代码: https://gitee.com/kunl ...

  7. Linux下的socket编程学习(TCP)

    1.什么是socket? socket的英文翻译就是接口,插座的意思,很形象,就相当于将2台电脑用一根线连起来,线的两头插在不同的电脑上,借此实现通讯的功能. 两台电脑通信,实际上是这两台电脑上的某个 ...

  8. linux下的socket通信

    linux下的socket通信 在linux下,无论多么复杂的服务器或客户端程序,无论什么编程语言实现的,其底层都离不开linux内核提供的系统调用(也就十多个函数),其网络通信的基本流程一定如下所述 ...

  9. Linux平台基于socket的文件传输服务器和客户端

    Linux平台基于socket的文件传输服务器和客户端 目录 前言 一.服务器程序结构 二.客户程序结构 三.代码 1.服务器主程序video_serv_fork.c 2.服务器子程序video_tr ...

最新文章

  1. 五、唱歌不如跳舞(下)
  2. 强化学习—— 蒙特卡洛树(Monte Carlo Tree Search, MCTS)
  3. risc系统服务器,精简的高端 解析四大RISC服务器处理器
  4. 模板的日常~。~。。。(持续更新中...)
  5. 高性能分布式事物中间件Sharding-Sphere介绍
  6. 第一个简单的注册页面
  7. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 登录与注册
  8. List集合之ArrayList
  9. 抓包工具之MitmProxy
  10. 超详细的ENSP安装教程附下载地址
  11. Ubuntu20.04安装详细图文教程(双系统)
  12. 手把手教你操作Tableau——真实公司数据分析项目实例(完整详细,小白也能学会)
  13. 专访梁杰:Swift或将取代Objective-C
  14. Android 微信支付总结
  15. 【100%通过率】华为OD机试真题 Python 实现【完美走位】【2022.11 Q4新题】
  16. 视频教程-数字图像处理实战-算法基础
  17. [思语]_心上人,我想对你说
  18. #有关汇编语言的org指令(许多不为人知的故事):
  19. 编写程序实现以下功能:计算1~n之间的素数并输出
  20. 人脸识别——基于百度智能云实现

热门文章

  1. 寒假训练八(优先队列)2020.02.14(7题)
  2. JavaScript学习过程
  3. 华为自研系统鸿蒙很快就会搭载进手机吗?
  4. 【转】这些JavaScript编程黑科技,装逼指南,高逼格代码,让你惊叹不已
  5. 高版本CAD画直线时,点击F8正交卡死解决方法
  6. 大数据集群扩容机架分配
  7. JS 浮点数转整数的方法
  8. 知识点滴 - 什么是当量
  9. 华为手机提示 系统发现xxx删除照片提示 如何不提示,且不保存在最近删除列表
  10. 基于Matlab使用 IMU、磁力计和高度计估计方向和高度(附源码)