java多客户端请求响应_Java实现服务器端对多个客户端请求响应

首先,创建一个服务器端的套接字,并规定套接字监听的端口:

ServerSocket serverSocket = new ServerSocket(8001);

然后,等待客户端通过端口8001的请求:

Socket socket=serverSocket.accept();

接下来创建客户端接收到的套接字的输入输出流,并将输入输出流转化成扫描器和写入器:

InputStream inputStream = incomingSocket.getInputStream();

OutputStream outputStream = incomingSocket.getOutputStream();

//将输入流转化为扫描器,输出流转化为写入器

Scanner inScanner=new Scanner(inputStream);

PrintWriter outPrintWriter= new PrintWriter(outputStream, true);

接下来就可以运用扫描器获得客户端传来的数据,并运用写入器将传来的数据发送给客户端:

String backString=inScanner.next();

outPrintWriter.println("you give me:"+backString);

然后,将每一个连接创建一个新的线程,独立运行。

运用命令行的telnet命令就可以连接上客户端:

0818b9ca8b590ca3270a3433284dd417.png

可以多次创建连接:

0818b9ca8b590ca3270a3433284dd417.png

一下为完整代码:

package server;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;

public class ThreadEchoServer {

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

int i=1;

ServerSocket serverSocket = new ServerSocket(8001);

while(true){

//等待客户端通过端口8001请求的连接

Socket socket=serverSocket.accept();

System.out.println("spawning"+i);

Runnable runnable= new ThreadEchoHandler(socket);

Thread thread = new Thread(runnable);

thread.start();

i++;

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

class ThreadEchoHandler implements Runnable

{

private Socket incomingSocket;

public ThreadEchoHandler(Socket in){

incomingSocket=in;

}

public void run(){

try {

try {

//建立套接字的输入输出流

InputStream inputStream = incomingSocket.getInputStream();

OutputStream outputStream = incomingSocket.getOutputStream();

//将输入流转化为扫描器,输出流转化为写入器

Scanner inScanner=new Scanner(inputStream);

PrintWriter outPrintWriter= new PrintWriter(outputStream, true);

//运用写入器的println函数向客户端输出字符串

outPrintWriter.println("welcome!");

//将客户端传输的数据发送回去,如果客户端输入的数据为bye,则断开连接

boolean flag=false;

while(!flag&&inScanner.hasNext()){

String backString=inScanner.next();

outPrintWriter.println("you give me:"+backString);

if(backString.trim().equals("bye")){

flag=true;

}

}

} finally {

// TODO: handle exception

//关闭套接字(很重要,防止造成资源浪费)

incomingSocket.close();

}

} catch (IOException e) {

// TODO: handle exception

}

}

}

本文参考《Java核心技术卷II》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值