服务器来实现接受多个客户的请求,并且处理响应。
服务器采用了多线程,代码如下服务器
package cn.kgc.basic.tcpthread;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器,项目都是服务器能够接受多个用户的访问,
* 每一次得到一个客户请求,就要开启一个新的线程
* @author 92126
*
*/
public class TCPsever {
public static void main(String[] args) {
try {
//1.指定服务器的端口
ServerSocket serverSocket = new ServerSocket(8080);
while(true) {
//2.因为要实现能够接受多个客户的访问。所以要进行循环处理开启多线程
//开始接受请求
Socket clientSocket = serverSocket.accept();
//3.给每一个用户开启一个线程
//4.创建线程组件
RequestThread requestThread = new RequestThread(clientSocket);
//5.开启线程
new Thread(requestThread).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务器的实现,用多线程来实现服务器里面的操作
package cn.kgc.basic.tcpthread;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
/**
* 多线程来接受请求处理
* @author 92126
*
*/
public class RequestThread implements Runnable {
private Socket clientSocket;
/**
* 通过构造方法来传递客户的信息
*/
public RequestThread(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
InputStream is = null;
BufferedReader br = null;
OutputStream os = null;
try {
// 3.调用输入流读取客户端信息
is = clientSocket.getInputStream();
// 为了读取方便,将流转换为高效字符流
br = new BufferedReader(new InputStreamReader(is));
System.out.print("客户端的请求信息为:");
String str = null;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
// -----------------给客户端响应------------------
clientSocket.shutdownInput();
os = clientSocket.getOutputStream();
os.write("你的信息,服务端已经接收成功!".getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
// 关流
try {
os.close();
br.close();
is.close();
clientSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
客户端,我只写了一个,你们可以同时用多台电脑进行实现,看看效果如何
package cn.kgc.basic.tcp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 基于TCP进行Socket编程:客户端
* @author 92126
*
*/
public class TCPClient {
@SuppressWarnings("resource")
public static void main(String[] args) {
Socket socket = null;
OutputStream os =null;
InputStream is =null;
BufferedReader br =null;
//*-*-----------发送请求---------------
try {
//1.指定服务器的端口和IP
socket = new Socket("localhost", 8080);
//2.获取输出流输出信息
os = socket.getOutputStream();
os.write("土豆土豆,我是地瓜,收到回答".getBytes());
//---------------接受响应---------------------
socket.shutdownOutput();
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
System.out.println("服务器的相应如下:");
String str =null;
while((str = br.readLine())!=null) {
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
is.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}