壹旦有客戶端連接,服務器就打開監聽端口並創建兩個新線程來負責連接。
壹個負責客戶端發送的信息(ClientMsgCollectThread類),
另壹個負責通過Socket (ServerMsgSendThread)發送數據。
Server.java電碼如下:
/*
*創建日期:2009年3月7日
*
* TODO要更改此生成文件的模板,請轉到。
*窗口-首選項-Java-代碼樣式-代碼模板
*/
包裝故障。多用戶;
導入Java . io . buffered reader;
導入Java . io . io exception;
導入Java . io . inputstreamreader;
導入Java . io . printwriter;
導入Java . net . server socket;
導入Java . net . socket;
/**
*服務器端
*
* @作者Faue
*/
公共類服務器擴展ServerSocket {
私有靜態final int SERVER _ PORT = 10000;
/**
*構造方法,用於實現連接的監控。
*
* @拋出IOException
*/
公共服務器()引發IOException {
超級(SERVER _ PORT);
嘗試{
while (true) {
socket socket = super . accept();
新線程(新ClientMsgCollectThread(socket)," getAndShow "
+ socket.getPort())。start();
新線程(新服務器MsgSendThread(套接字),"發送"
+ socket.getPort())。start();
}
} catch (IOException e) {
e . printstacktrace();
}
}
公共靜態void main(String[] args)引發IOException {
新服務器();
}
/**
*此類用於創建接收客戶端發送的信息並顯示該信息的線程。
*
* @作者Faue
* @版本1.0.0
*/
ClientMsgCollectThread類實現Runnable {
私有套接字客戶端;
中的私有BufferedReader
private string buffer inputstring buffer = new string buffer(" Hello ");
/**
*獲取套接字的輸入流
*
* @param s
* @拋出IOException
*/
公共ClientMsgCollectThread(套接字s)引發IOException {
客戶端= s;
in = new buffered reader(new InputStreamReader(client
。getInputStream()," GBK "));
}
公共無效運行(){
嘗試{
而(!client.isClosed()) {
inputStringBuffer.delete(0,inputstringbuffer . length());
inputstringbuffer . append(in . readline());
system . out . println(getMsg(inputstring buffer . tostring()));
}
} catch (IOException e) {
//e . printstacktrace();
system . out . println(client . tostring()+"已關閉!");
}
}
/**
*構造顯示的字符串
*
* @param line
* @返回
*/
私有字符串getMsg(字符串行){
return client.toString() +"表示:“+line;
}
}
/**
*這個類用於創建壹個發送數據的線程。
*
* @作者Faue
* @版本1.0.0
*/
類ServerMsgSendThread實現Runnable {
私有套接字客戶端;
私人版寫手出局;
私有BufferedReader keyboardInput
private string buffer output string buffer = new string buffer(" Hello ");
/**
*獲取鍵盤的輸入流
*
* @param s
* @拋出IOException
*/
公共服務器MsgSendThread(套接字s)引發IOException {
客戶端= s;
out = new PrintWriter(client . get output stream(),true);
keyboard input = new buffered reader(new InputStreamReader(system . in));
}
公共無效運行(){
嘗試{
而(!client.isClosed()) {
outputStringBuffer.delete(0,outputstringbuffer . length());
outputstringbuffer . append(keyboard input . readline());
out . println(outputstringbuffer . tostring());
}
} catch (IOException e) {
//e . printstacktrace();
system . out . println(client . tostring()+"已關閉!");
}
}
}
}
客戶:
實現基於IP地址的連接,連接後創建兩個線程發送和接收信息。
/*
*創建日期:2009年3月7日
*
*/
包裝故障。多用戶;
導入Java . io . buffered reader;
導入Java . io . io exception;
導入Java . io . inputstreamreader;
導入Java . io . printwriter;
導入Java . net . socket;
/**
*客戶
*
* @作者Faue
*/
公共類客戶端{
私有套接字mySocket
/**
*創建螺紋的施工方法
*
* @param IP
* @拋出IOException
*/
公共客戶端(字符串IP)引發IOException {
嘗試{
mySocket = new Socket(IP,10000);
新線程(新ServerMsgCollectThread(my socket)," getAndShow "
+ mySocket.getPort())。start();
新線程(新ClientMsgSendThread(mySocket),"發送"
+ mySocket.getPort())。start();
} catch (IOException e) {
//e . printstacktrace();
System.out.println("Server。IP:" + IP
+"端口:10000無法連接");
}
}
公共靜態void main(String[] args)引發IOException {
嘗試{
新客戶端(args[0]);
} catch(異常e) {
System.out.println("輸入的IP地址不正確");
}
}
/**
*此類用於創建接收服務器發送的信息並顯示該信息的線程。
*
* @作者Faue
* @版本1.0.0
*/
類ServerMsgCollectThread實現Runnable {
私有套接字客戶端;
中的私有BufferedReader
private string buffer inputstring buffer = new string buffer(" Hello ");
/**
*獲取套接字的輸入流
*
* @param s
* @拋出IOException
*/
公共服務器MsgCollectThread(套接字s)引發IOException {
客戶端= s;
in = new buffered reader(new InputStreamReader(client
。getInputStream()," GBK "));
}
公共無效運行(){
嘗試{
而(!client.isClosed()) {
inputStringBuffer.delete(0,inputstringbuffer . length());
inputstringbuffer . append(in . readline());
system . out . println(getMsg(inputstring buffer . tostring()));
}
} catch (IOException e) {
//e . printstacktrace();
system . out . println(client . tostring()+"已關閉!");
system . exit(0);
}
}
/**
*構造輸入字符串
*
* @param line
* @返回
*/
私有字符串getMsg(字符串行){
return client.toString() +"表示:“+line;
}
}
/**
*這個類用於創建壹個發送數據的線程。
*
* @作者Faue
* @版本1.0.0
*/
ClientMsgSendThread類實現Runnable {
私有套接字客戶端;
私人版寫手出局;
私有BufferedReader keyboardInput
private string buffer output string buffer = new string buffer(" Hello ");
/**
*獲取鍵盤的輸入流
*
* @param s
* @拋出IOException
*/
公共ClientMsgSendThread(套接字s)引發IOException {
客戶端= s;
out = new PrintWriter(client . get output stream(),true);
keyboard input = new buffered reader(new InputStreamReader(system . in));
}
公共無效運行(){
嘗試{
而(!client.isClosed()) {
outputStringBuffer.delete(0,outputstringbuffer . length());
outputstringbuffer . append(keyboard input . readline());
out . println(outputstringbuffer . tostring());
}
out.println(" -再見,拜拜!- ");
} catch (IOException e) {
//e . printstacktrace();
system . out . println(client . tostring()+"已關閉!");
system . exit(0);
}
}
}
}
如果對妳有幫助,請記得采納為滿意答案,謝謝!祝妳生活愉快!
瓦埃拉