socketio 客户端 java socket.io java服务端
转载
服务器端
package com.socket2;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Administrator 先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client
* 端,客户端发出连接请求, 服务端监听到这次请求后向客户端发回接受消息,连接建立,启动一个线程去处理这次请求,然后继续死循环监听其他请求。
* 客户端输入字符串后按回车键,向服务器发送数据。服务器读取数据后回复客户端数据。这次请求处理完毕,启动的线程消亡。 如果客户端接收到
* "OK" 之外的返回数据,会再次发送连接请求并发送数据,服务器会为这次连接再次启动一个线程来进行响应。。。
* 直到当客户端接收到的返回数据为"OK" 时,客户端退出。
*
*/
public class Server {
// 监听的端口号
public static final int PORT = 12345;
public static void main(String[] args) {
System.out.println("服务器启动...\n");
Server server = new Server();
// 调用init 函数
server.init();
}
public void init() {
try {
// 端口号
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
// 一旦有堵塞, 则表示服务器与客户端获得了连接
Socket client = serverSocket.accept();
// 处理这次连接
new HandlerThread(client);
}
} catch (Exception e) {
System.out.println("服务器异常: " + e.getMessage());
}
}
private class HandlerThread implements Runnable {
private Socket socket;
public HandlerThread(Socket client) {
socket = client;
new Thread(this).start();
}
public void run() {
try {
// 读取客户端数据
DataInputStream input = new DataInputStream(
socket.getInputStream());
String clientInputStr = input.readUTF(); // 这里要注意和客户端输出流的写方法对应,否则会抛异常
// 处理客户端数据
System.out.println("客户端发过来的内容:" + clientInputStr);
// 向客户端回复信息
DataOutputStream out = new DataOutputStream(
socket.getOutputStream());
System.out.print("请输入:\t");
// 发送键盘输入的一行
String s = new BufferedReader(new InputStreamReader(System.in))
.readLine();
out.writeUTF(s);
out.close();
input.close();
} catch (Exception e) {
System.out.println("服务器 run 异常: " + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (Exception e) {
socket = null;
System.out.println("服务端 finally 异常:" + e.getMessage());
}
}
}
}
}
}
客户端
package com.socket2;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
// 服务器的地址和端口号
public static final String IP_ADDR = "localhost";
public static final int PORT = 12345;
public static void main(String[] args) {
//项目开始执行时间
long start = System.currentTimeMillis();
//循环100次
for (int i = 0; i < 100; i++) {
System.out.println("客户端启动。。。。");
System.out.println("当接受到服务器端字符为\"OK\" 的时候, 客户端将终止\n");
while (true) {
Socket socket = null;
/*
* try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
* catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
* finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }
*/
try {
// 创建一个流套接字并将其连接到指定主机上的指定端口号
socket = new Socket(IP_ADDR, PORT);
// 读取服务器端数据
DataInputStream inputStream = new DataInputStream(
socket.getInputStream());
// 向服务器发送数据
DataOutputStream outputStream = new DataOutputStream(
socket.getOutputStream());
System.out.println("请输入:\t");
//System.in 接受从控制台输入的字节
//new InputStreamReader(System.in);构造一个InputStreamReader对象
//构造一个字符流的缓存,里面存放在控制台输入的字节转换后成的字符。
//readLine():读取一个文本行 ,参考:
String string = new BufferedReader(new InputStreamReader(
System.in)).readLine();
//writeUTF()写出一个UTF-8编码的字符串前面会加上2个字节的长度标识,已标识接下来的多少个字节是属于本次方法所写入的字节数。
outputStream.writeUTF(string);
String ret = inputStream.readUTF();
System.out.println("服务器端返回来的是:" + ret);
// 如接受到 “OK” 则断开连接
if ("ok".equals(ret)) {
System.out.println("客户端将关闭连接");
//线程睡眠500ms
Thread.sleep(500);
//结束整个循环体
break;
}
//关闭流
outputStream.close();
inputStream.close();
} catch (Exception e) {
System.out.println("客户端异常:" + e.getMessage());
} finally {
//判断不等于null
if (null != socket) {
//异常处理
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客户端 finally 异常:"+ e.getMessage());
}
}
}
}
}
//项目运行结束时间
long end = System.currentTimeMillis();
System.out.println("项目总体输出时间:" + (end - start) + "ms");
}
}
![socketio 客户端 java socket.io java服务端_socketio 客户端 java](https://s2.51cto.com/images/blog/202403/04072341_65e5067d63aec51335.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。