當前位置:名人名言大全網 - 祝福短信 - Java多線程實現服務器和客戶端之間文件傳輸的代碼!!!急!!!!

Java多線程實現服務器和客戶端之間文件傳輸的代碼!!!急!!!!

該程序分為服務器端和客戶端

壹旦有客戶端連接,服務器就打開監聽端口並創建兩個新線程來負責連接。

壹個負責客戶端發送的信息(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);

}

}

}

}

如果對妳有幫助,請記得采納為滿意答案,謝謝!祝妳生活愉快!

瓦埃拉