Server端代码:
public class Server {
public static void main(String[] args) {
int port = 8888;
ServerSocket server = null;
PrintWriter pw = null;
try {
//1.表示创建服务器对象server
server = new ServerSocket(port);
System.out.println("开启服务器");
//accept方法 阻塞的状态 ;等待客户端连接
// 返回值socket 表示一个连接的客户端
//当有客户端连接成功后。阻塞状态结束
System.out.println("等待客户端的连接...");
Socket socket = server.accept();
System.out.println("有客户端连接到服务器端");
//获取输入流对象,接收数据
InputStream is = socket.getInputStream();
//包装流作用: 便捷将String类对象发送到客户端(以字节的方式发送)
BufferedReader br =
new BufferedReader(new InputStreamReader(is));
//读取数据
//读取数据阻塞状态: 没有找行结尾符
String data = br.readLine();
System.out.println("server接收数据:"+data);
//向客户端返回数据
OutputStream os = socket.getOutputStream();
String str = "你好,客户端";
//获取输出流
pw = new PrintWriter(os);
pw.write(str);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(pw != null) pw.close();
try {
if(server != null)
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Client代码:
public class Client {
public static void main(String[] args) {
//1.创建一个客户端
String host = "127.0.0.1";
int port = 8888;
PrintWriter pw = null;
Socket socket = null;
BufferedReader br = null;
try {
//1.socket对象创建成功,表示客户端正确的连接服务器端
//socket 表示套接字的端点
socket = new Socket(host, port);
System.out.println("成功建立一个客户端");
System.out.println("向服务器发送数据");
//获取发送数据的输出流
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
//对输出流进行包装
pw = new PrintWriter(os);
//向服务端发送数据
pw.println("你好:Client");
pw.flush();
//接收服务器端返回的数据
//对输入流进行包装
br = new BufferedReader(new InputStreamReader(is));
String data = br.readLine();
System.out.println("来自服务器的数据:"+data);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(pw != null)pw.close();
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
注意:需要使用PringWriter和BufferReader对socket获取的输入流和输出流进行包装,不能直接写成这样发送数据 … 之类的
os.write("你好:Server")
测试:
先运行Server端,在运行Client端,如果先运行Client端则会报错
运行完Server端后 Server会一直点等待客户端执行,然后才会结束