上一片文章Java客户端与服务器端的超简易通讯1主要想实现的效果是:客户端发送几个文字到服务器端,而服务器端接收文字并将其输出,而这篇文章想实现的效果是:在客户端输入一些数据(例如:"Hello ServerSocket!"),并将这些数据发送给服务器端,在服务器端判断这些数据是否是服务器想要的,若为想要的,则返回数据给客户端(例如:"Hi Socket!"),并把客户端和服务器端所接收的数据都将其输出。
好了,先贴出客户端的代码:
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
/**
* 客户端代码
*
*/
public class ClientSocket {
public static void main(String[] args) {
try {
// 创建一个socket,并开始连接服务器
Socket s = new Socket("172.31.84.13", 80);// "192.168.1.105"为服务器的ip地址,80为服务器的端口后,这两个都不是固定的。
//创建一个Scanner对象,用于输入
Scanner sc = new Scanner(System.in);
String socketData = sc.nextLine();
// 创建一个输出流
OutputStream os = s.getOutputStream();
// 创建一个字节打印流,便于将数据储存到输出流中
PrintStream ps = new PrintStream(os);
// 将所输入的数据打印到输出流中
ps.println(socketData);
//创建一个输入流,用于读取用服务器中返回的数据
InputStream is = s.getInputStream();
//创建一个DataInputStream对象,便于读取输入流中的数据
DataInputStream dis = new DataInputStream(is);
//已UTF-8的格式读取输入流中的数据
String request = dis.readLine();
//输出所读取的数据
System.out.println(request);
// 关闭流对象,释放资源
s.close();
ps.close();
os.close();
is.close();
dis.close();
} catch (Exception e) {
// 将错误报告输出
e.printStackTrace();
}
}
}
以下为服务器的代码:
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器端代码
*
*/
public class ServerSocket1 {
public static void main(String[] args) {
try {
//创建一个ServerSocket对象,并设置其端口
ServerSocket ss = new ServerSocket(80);
//设置一个无限循环,使服务器能无时无刻在检测是否有客户端发信息给服务器
while (true) {
//获取客户端的对象
Socket s = ss.accept();
//将客户端发送的输出流接收,在服务器的角度上看就是输入流
InputStream is = s.getInputStream();
//创建一个DataInputStream对象,便于解析所接受的输入流
DataInputStream dis = new DataInputStream(is);
//读取输入流中的一行数据,并将其赋值给一个字符串记录
String request = dis.readLine();
//将字符串输出
System.out.println(request);
//创建一个输出流,并将其返回给客户端
OutputStream os = s.getOutputStream();
// 创建一个字节打印流,便于将数据储存到输出流中
PrintStream ps = new PrintStream(os);
//判断客户端所发送的数据是否为服务器所需要的
if (request.equals("Hello ServerSocket!")) {
ps.println("Hi Socket!");
} else {
ps.println("smile~");
}
//关闭Socket对象,节省资源
s.close();
}
} catch (Exception e) {
//将错误报告输出
e.printStackTrace();
}
}
}
以下为客户端的运行结果:
以下为服务器的运行结果: