基於Socket的聊天室源程式

2021-07-05 01:27:40 字數 1696 閱讀 1135

基於socket的聊天室源程式:聊天室主要由聊天室伺服器和聊天室客戶端組成。聊天室伺服器負責管理與客戶端的連線並傳送訊息給客戶端;客戶端負責接收或者傳送聊天訊息,登入聊天室伺服器等。

**分客戶端和伺服器端**。

啟動聊天伺服器-->啟動***-->等待-->接受客戶端連線-->啟動客戶資料接收執行緒

客戶資料接收執行緒:當保持連線且socketserviceflag為true時讀取資料並解析命令,一直迴圈這個過程直到收到退出命令。共五種命令,conn命令,list命令, chat命令, priv命令, exit命令。

conn

命令:向全部使用者傳送join命令,向當前使用者(自己)傳送list命令

list

命令:向當前使用者傳送list命令

chat

命令:向全部使用者傳送chat命令

priv

命令:向接收者傳送資料,向傳送者傳送資料

exit

命令:刪除使用者資料,向全部使用者傳送quit命令

該**來自《c#網路與通訊程式設計案例精講》 (吳晨,陳建孝;清華大學出版社)中的源**。具體的設計過程可參考該書。**為c#語言編寫。

**中關於c#的知識點:

string port;

int lport;

lport=system.convert.toint32(port);

this.tbsocketclientnum.text = system.convert.tostring(clients.count);

string msg;

system.byte message=system.text.encoding.default.getbytes(msg.tochararray());

byte buff=new byte[1024];

string clientcommand=system.text.encoding.default.getstring(buff, 0, len);//第二個引數為index

throw new argumentexception("埠號為空,不能啟動伺服器");

private system.windows.forms.richtextbox rtbsocketmsg;

using system.net;

ipaddress addresslist = dns.gethostbyname(dns.gethostname()).addresslist;

if (addresslist.length<1)

return addresslist[0].tostring();

using system.net.sockets;

//該伺服器預設的監聽的埠號

private tcplistener listener;

ipaddress ipadd=ipaddress.parse(ip);

//建立伺服器套接字

listener=new tcplistener(ipadd, port);

//開始監聽伺服器端口

listener.start();

基於UDP聊天室程式

基於udp聊天室程式使用socket程式設計實現。windows套接字在兩種模式下執行i o操作,阻塞和非阻塞。在阻塞模式下,在i o操作完成前,執行操作的winsock函式會一直等待下去 如recvfrom,wsarecvfrom函式 不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,win...

聊天室程式

伺服器 include include include include include include include include define servport 8081 伺服器端口號 define bufsize 200 最大傳輸量 int main int args,char argv s...

基於socket通訊的網路聊天室(linux)

客戶端 include header.h 客戶端接收訊息的執行緒函式 void recv func void args close sock fd exit 0 客戶端和服務端進行通訊的處理函式 void process int sock fd close sock fd int main int ...