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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bio java 例子_JAVA BIO 服务器与客户端实现示例

發布時間:2023/12/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bio java 例子_JAVA BIO 服务器与客户端实现示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼只兼容JAVA 7及以上版本。

服務器端代碼:package?com.stevex.app.bio;

import?java.io.BufferedReader;

import?java.io.IOException;

import?java.io.InputStreamReader;

import?java.io.PrintWriter;

import?java.net.ServerSocket;

import?java.net.Socket;

import?javax.net.ServerSocketFactory;

public?class?XiaoNa?{

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

XiaoNa?xiaona?=?new?XiaoNa();

ServerSocket?serverSocket?=?null;

Socket?socket?=?null;

try?{

//可以設置客戶連接請求隊列的長度,比如5,隊列長度超過5后拒絕連接請求

//serverSocket?=?ServerSocketFactory.getDefault().createServerSocket(8383,?5);

serverSocket?=?ServerSocketFactory.getDefault().createServerSocket(8383);

while(true){

try{

//監聽直到接受連接后返回一個新Socket對象

socket?=?serverSocket.accept();//阻塞

//new一個線程處理連接請求

new?Thread(xiaona.new?Worker(socket)).start();;

}

catch?(Throwable?e)?{//防止發生異常搞死服務器

e.printStackTrace();

}

}

}?catch?(IOException?e)?{

e.printStackTrace();

}

finally{

try?{

if(socket?!=?null){

socket.close();

}

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

private?static?String?getAnswer(String?question){

String?answer?=?null;

switch(question){

case?"who":

answer?=?"我是小娜";

break;

case?"what":

answer?=?"我是來幫你解悶的";

break;

case?"where":

answer?=?"我來自外太空";

break;

default:

answer?=?"請輸入?who,?或者what,?或者where";

}

return?answer;

}

private?class?Worker?implements?Runnable{

private?Socket?socket;

public?Worker(Socket?socket){

this.socket?=?socket;

}

@Override

public?void?run()?{

BufferedReader?reader?=?null;

PrintWriter?writer?=?null;

try?{

reader?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream()));

writer?=?new?PrintWriter(socket.getOutputStream());

String?question?=?reader.readLine();//沒有內容會阻塞

while(!question.equals("OVER")){

String?answer?=?getAnswer(question);

writer.println(answer);

question?=?reader.readLine();

}

writer.println("OVER");//OVER作為操作完成暗號

writer.flush();

if(writer?!=?null){

writer.close();

}

if(reader?!=?null){

reader.close();

}

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

客戶端代碼:package?com.stevex.app.bio;

import?java.io.BufferedReader;

import?java.io.IOException;

import?java.io.InputStreamReader;

import?java.io.PrintWriter;

import?java.net.Socket;

public?class?Client?{

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

Client?c?=?new?Client();

//種20個線程發起Socket客戶端連接請求

for(int?i=0;?i<20;?i++){

new?Thread(c.new?Worker()).start();

}

}

private?class?Worker?implements?Runnable{

@Override

public?void?run()?{

Socket?socket?=?null;

BufferedReader?reader?=?null;

PrintWriter?writer?=?null;

try?{

//創建一個Socket并連接到指定的目標服務器

socket?=?new?Socket("localhost",?8383);

reader?=?new?BufferedReader(new?InputStreamReader(

socket.getInputStream()));

writer?=?new?PrintWriter(socket.getOutputStream());

writer.println("who");

writer.println("what");

writer.println("where");

writer.println("OVER");//OVER作為操作完成暗號

writer.flush();

String?answer?=?reader.readLine();//沒有內容會阻塞

while(!?answer.equals("OVER")){

System.out.println(Thread.currentThread().getId()?+?"---Message?from?server:"?+?answer);

answer?=?reader.readLine();

}

}?catch?(IOException?e)?{

e.printStackTrace();

}?finally?{

try?{

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

writer.close();

}

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

reader.close();

}

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

socket.close();

}

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

}

總結

以上是生活随笔為你收集整理的bio java 例子_JAVA BIO 服务器与客户端实现示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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