日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java socket编写服务器_Java网络学习笔记1:用(Server)Socket编写简单的客户/服务器程序...

發(fā)布時間:2023/12/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket编写服务器_Java网络学习笔记1:用(Server)Socket编写简单的客户/服务器程序... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先需清楚Socket類提供了getInputStream()方法和getOutputStream()方法,分別返回輸入流InputStream對象和輸出流OutputStream對象。程序只需向數據流寫數據,就能向對方發(fā)送數據;只需從輸入流讀數據,就能接收來自對方的數據。

創(chuàng)建服務器程序DemoServer01

public?class?DemoServer01?{

/**

*?@author?牧羊的伯格女皇??11/12

*?@param?args

*?創(chuàng)建服務端與客戶端之間的相互通信

*/

private?int?port?=?9999;

private?ServerSocket?server;

public?static?void?main(String[]?args)?{

new?DemoServer01().serverTalk();

}

public?DemoServer01(){

try?{

server?=new??ServerSocket(9999);

System.out.println("服務器啟動且監(jiān)聽了端口:?"?+?server.getLocalPort()?);

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

//輸出流

public?PrintWriter?getWriter(Socket?socket)?throws?IOException{

OutputStream?outSocket?=?socket.getOutputStream();

//參數true表示每寫一行,PrintWriter緩存就自動溢出,把數據寫到目的地.

return?new?PrintWriter(?outSocket,?true?);

}

//?輸入流

public?BufferedReader?getReader(Socket?socket)?throws?IOException{

InputStream?inSocket?=?socket.getInputStream();

//?參數?Reader?????????????????????//參數?InputStream

return?new?BufferedReader(?new?InputStreamReader(?inSocket?)?);

}

public?void?serverTalk(){

Socket?socket?=?null;

try?{

socket?=?server.accept();??//一直偵聽等待客戶的連接

PrintWriter?pw?=?getWriter(socket);

BufferedReader?br?=?getReader(socket);

BufferedReader?localReader?=?new?BufferedReader(?new?InputStreamReader(?System.in?)?);

String?msg?=?null;

while(true){

while(?(msg?=?br.readLine()?)?!=?null?){

System.out.println("客戶端對服務端你說:?"?+?msg);

if(?msg.equals("bye")){

System.out.println("客戶端主動斷開了與您的連接.");

break;

}

System.out.print("服務端對客戶端說:??"?);

String?inString?=?localReader.readLine();

pw.println(?inString?);

if(??inString.equals("bye")){

System.out.println("服務端斷開了與客戶端?"?+?socket.getInetAddress()?+"?的連接");

break;

}

}

}

}?catch?(Exception?e)?{

e.printStackTrace();

}finally{

if(?socket?!=?null?){

try?{

socket.close();

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

}

對于服務器程序,其中最主要的方法還是為serverTalk()方法,它不斷等待客戶的連接請求,server.accept()方法返回一個Socket對象時,就意味著與一個客戶建立了連接。接下來從Socket對象中得到輸出流和輸入流,并且分貝用PrintWriter和BufferedReader來裝飾他們。然后不斷調用BufferedReader 的 readLine()方法讀取客戶發(fā)來的字符串,在調用PrintWriter的println()方法向客戶返回字符串。如果為“bye”,則結束通信,調用socket.close()方法斷開連接。

3.創(chuàng)建客戶程序DemoClient01

public?class?DemoClient01?{

private?String?host?=?"localhost";

private?int?port?=?9999;

private?Socket?socket;

public?static?void?main(String[]?args)?{

new?DemoClient01().clientTalk();

}

public?DemoClient01(){

try{

socket?=?new?Socket(host,port);??//創(chuàng)建socket對象

System.out.println("客戶端已連接到服務器...");

}catch?(UnknownHostException?e)?{

e.printStackTrace();

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

public?PrintWriter?getWriter(Socket?socket)?throws?IOException{

OutputStream?outSocket?=?socket.getOutputStream();

return?new?PrintWriter(?outSocket,true);

}

public?BufferedReader?getReader(Socket?socket)?throws?IOException{

InputStream?inSocket?=?socket.getInputStream();

return?new?BufferedReader(?new?InputStreamReader(inSocket)?);

}

public?void?clientTalk(){

try?{

BufferedReader?br?=?getReader(socket);

PrintWriter?pw?=?getWriter(socket);

BufferedReader?localReader?=?new?BufferedReader(?new?InputStreamReader(System.in)?);

String?msg?=?null;

System.out.print("客戶端對服務端說:?");

while(?(msg?=?localReader.readLine()?)?!=?null?){

pw.println(msg);

if(?msg.equals(?"bye"?)){

System.out.println("客戶端主動斷開與服務端的連接.");

break;

}

String?readString?=?br.readLine();

System.out.println("服務端對客戶端你說:?"?+?readString??);

if(?readString.equals(?"bye"?)){

System.out.println("服務端主動斷開了與客戶端你的連接.");

break;

}

System.out.print("客戶端對服務端說:?");

}

}?catch?(UnknownHostException?e)?{

e.printStackTrace();

}?catch?(IOException?e)?{

e.printStackTrace();

}finally{

try?{

socket.close();

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

對于客戶程序,其中最主要的是clientTalk()方法、其不斷讀取用戶從控制臺輸入的字符串,然后把它發(fā)送給服務器程序,再把服務器返回的字符串打印到控制臺。

總結

以上是生活随笔為你收集整理的java socket编写服务器_Java网络学习笔记1:用(Server)Socket编写简单的客户/服务器程序...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。