當前位置:首頁 » 操作系統 » linux下的聊天室

linux下的聊天室

發布時間: 2025-03-27 13:10:11

① 如何編寫linux聊天室

自從開始學linux網路編程後就想寫個聊天室,一開始原本打算用多進程的方式來寫,可是發覺進程間的通信有點麻煩,而且開銷也大,後來想用多線程能不能實現呢,於是便去看了一下linux里線程的用法,實際上只需要知道 pthread_create 就差不多了,於是動手開干,用了兩天時間,調試的過程挺痛苦的,一開始打算用純C來擼,便用簡單的數組來存儲客戶端的連接信息,可是運行時出現了一些很奇怪的問題,不知道是不是訪問了臨界資源,和線程間的互斥有關等等;奇怪的是,當改用STL的set或map時問題就解決了,但上網搜了下發現STL也不是線程安全的,至於到底是什麼問題暫時不想去糾結了,可能是其它一些小細節的錯誤吧。先貼上代碼:

首先是必要的頭文件 header.h:

#!/usr/bin/env python#-*- coding: utf-8 -*-from PyQt4 import QtGui, QtCoreimport sysimport socketimport threadclass Client(QtGui.QWidget):

BUF_LEN = 1024 def __init__(self, parent=None):

QtGui.QWidget.__init__(self, parent)

self.setWindowTitle(u'TCP客戶端')
self.resize(600, 500)
self.center()
layout = QtGui.QGridLayout(self)

label_ip = QtGui.QLabel(u'遠程主機IP:')
layout.addWidget(label_ip, 0, 0, 1, 1)
self.txt_ip = QtGui.QLineEdit('127.0.0.1')
layout.addWidget(self.txt_ip, 0, 1, 1, 3)

label_port = QtGui.QLabel(u'埠:')
layout.addWidget(label_port, 0, 4, 1, 1)
self.txt_port = QtGui.QLineEdit('9003')
layout.addWidget(self.txt_port, 0, 5, 1, 3)

self.isConnected = False
self.btn_connect = QtGui.QPushButton(u'連接')
self.connect(self.btn_connect, QtCore.SIGNAL( 'clicked()'), self.myConnect)
layout.addWidget(self.btn_connect, 0, 8, 1, 2)

label_recvMessage = QtGui.QLabel(u'消息內容:')
layout.addWidget(label_recvMessage, 1, 0, 1, 1)

self.btn_clearRecvMessage = QtGui.QPushButton(u'↓ 清空消息框')
self.connect(self.btn_clearRecvMessage, QtCore.SIGNAL( 'clicked()'), self.myClearRecvMessage)
layout.addWidget(self.btn_clearRecvMessage, 1, 7, 1, 3)

self.txt_recvMessage = QtGui.QTextEdit()
self.txt_recvMessage.setReadOnly(True)
self.txt_recvMessage.setStyleSheet('background-color:yellow')
layout.addWidget(self.txt_recvMessage, 2, 0, 1, 10)

lable_name = QtGui.QLabel(u'姓名(ID):')
layout.addWidget(lable_name, 3, 0, 1, 1)
self.txt_name = QtGui.QLineEdit()
layout.addWidget(self.txt_name, 3, 1, 1, 3)

self.isSendName = QtGui.QRadioButton(u'發送姓名')
self.isSendName.setChecked(False)
layout.addWidget(self.isSendName, 3, 4, 1, 1)

label_sendMessage = QtGui.QLabel(u' 輸入框:')
layout.addWidget(label_sendMessage, 4, 0, 1, 1)
self.txt_sendMessage = QtGui.QLineEdit()
self.txt_sendMessage.setStyleSheet("background-color:cyan")
layout.addWidget(self.txt_sendMessage, 4, 1, 1, 7)
self.btn_send = QtGui.QPushButton(u'發送')
self.connect(self.btn_send, QtCore.SIGNAL('clicked()'), self.mySend)
layout.addWidget(self.btn_send, 4, 8, 1, 2)

self.btn_clearSendMessage = QtGui.QPushButton(u'↑ 清空輸入框')
self.connect(self.btn_clearSendMessage, QtCore.SIGNAL( 'clicked()'), self.myClearSendMessage)
layout.addWidget(self.btn_clearSendMessage, 5, 6, 1, 2)
self.btn_quit = QtGui.QPushButton(u'退出')
self.connect(self.btn_quit, QtCore.

② Linux下Socket網路編程聊天室 程序運行後出錯,伺服器端顯示 accept:invalid argument.多謝啦!

參數不正確

③ linux多人聊天室是如何實現的

多人聊天室可通過保持網路連接、保持進程運行保持通信。想要自己搭建多人聊天室其實也很簡單,你可以直接用ZEGO即時通訊,內置文本、圖片、語音、視頻、地理位置等各種消息類型,支持單聊、群聊、房間聊天,自由組合IM能力,也可針對自身業務場景,定製所需服務規格。

熱點內容
安卓軟體啟動器怎麼用 發布:2025-03-30 17:31:15 瀏覽:682
硬體配置怎麼弄 發布:2025-03-30 17:18:07 瀏覽:779
什麼是安卓手機mtp模式 發布:2025-03-30 17:16:53 瀏覽:8
腳本鏡頭名稱 發布:2025-03-30 17:16:52 瀏覽:160
騰訊qq源碼 發布:2025-03-30 17:15:29 瀏覽:756
上傳伺服器的軟體下載 發布:2025-03-30 17:01:22 瀏覽:339
普通的我的世界生存伺服器 發布:2025-03-30 16:59:12 瀏覽:120
linuxmysql安裝包下載 發布:2025-03-30 16:57:45 瀏覽:805
廣聯達配置文件非法是怎麼回事 發布:2025-03-30 16:56:13 瀏覽:970
c語言可用性 發布:2025-03-30 16:49:33 瀏覽:897