使用基於tcp協議的socket建立聊天室,
昨天我寫的部落格已經介紹了怎麼使用 serversocket 建立服務端,以及服務端怎麼返回資料給客戶端
昨天寫的部落格有個缺陷,就是 客戶端只能 先傳送,後讀取,對於正常情況來說應該是,客戶端讀取和傳送是互相不相干涉的兩個步驟,所以這裡就得使用到多執行緒了,為 客戶端傳送資料,和接收資料各開闢一條道路。
首先來看看客戶端的傳送訊息:
客戶端傳送訊息,得跟 socket 關聯起來,裡面則有 輸入輸出流,因為客戶端要想傳送則必須有輸出流,輸入流則是因為我們在控制台使用,使用輸入流輸入資料
那麼我們來看看 clientsend 類
/**
* 傳送資料執行緒
* @author snow
* */
public class clientsend implements runnable catch (ioexception e) }
/*** 獲取控制台輸入的資料
* @return
*/private string getmsg() catch (ioexception e)
return new string(data , 0 ,len); }
/*** 傳送訊息
*/public void send() catch (ioexception e) }
@override
public void run()
}}
接下來就是接收類:
接收類也和讀取類一樣,需要和socket 進行關聯
看看**吧:
/**
* 接收訊息
* @author snow
* */
public class clientreceive implements runnable catch (ioexception e) }
// 接收資料
public string receivemsg() catch (ioexception e)
return "";
} @override
public void run()
}}
則,客戶端,建立乙個 socket連線,然後new 兩個執行緒跑起來就可以實現 接收傳送互不干擾了
public class myclient
}
服務端這邊,如果使用 while(true)裡面按照原來得樣子不使用執行緒寫的話,則乙個客戶端連線上了,則其他的客戶端得等待這個客戶端聊完了才能連上,很顯然這是不合常理得。
為了避免這種問題,我們服務端也得使用多執行緒。
通常多個客戶端一起聊稱之為群聊,自己傳送得訊息別人都收得到。
所以我們這裡建立乙個 server 類實現 runable,同時使用乙個 list來裝 每乙個server
看看**吧:
/**
* 服務端的 server
* @author snow
* */
public class server implements runnable catch (ioexception e) }
/*** 接收資料
* @return
*/private string recevicemsg() catch (ioexception e)
return new string(data, 0, len); }
/*** 傳送訊息
*/private void sendmsg(string data) catch (ioexception e) }
/*** 傳送給另外的客戶端訊息
*/private void sendmsgtoallclient()
server.sendmsg(msg);
} }@override
public void run() }
}
myserver 服務端類這樣寫:
public class myserver
public void server() throws ioexception
}}
這樣,乙個 基於tcp得socket聊天室就完成啦! 網路程式設計之socket
套接字 socket 是乙個抽象層,應用程式可以通過它傳送或接收資料,可對其進行像對檔案一樣的開啟 讀寫和關閉等操作。套接字允許應用程式將i o插入到網路中,並與網路中的其他應用程式進行通訊。網路套接字是ip位址與埠的組合。套接字起源於 20 世紀 70 年代加利福尼亞大學伯克利分校版本的 unix...
網路程式設計之socket
1,socket 通訊 服務端 import socket server socket.socket server.bind 127.0.0.1,8080 server.listen 5 conn,addr server.accept data conn.recv 1024 print data c...
網路程式設計之socket
1 是什麼?socket又稱套接字,是能夠實現程序間通訊的乙個 東西 2 為什麼?socket是對tcp ip協議的乙個封裝,相當於軟體設計模式中的外觀者模式 socket作為按鈕,按鈕內部連線著tcp ip的若干個對應的協議,也其實可以簡單理解為socket內部封裝著與tcp ip參考模型中各層進...