服务器
server.java
package socket;
import java.io.*;
import java.net.*;
public class server {
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
//创建一个ServerSocket在端口4700监听客户请求
server=new ServerSocket(7217);
System.out.println("服务器已打开!");
}catch(Exception e){
e.printStackTrace();
}
Socket socket=null;
try{
//使用accept()阻塞等待客户请求,有客户
socket=server.accept();//请求到来则产生一个Socket对象,并继续执行
}catch(Exception e){
e.printStackTrace();//出错,打印出错信息
}
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//从socket获取输入流并转换到输入流缓存,从这里可以读到从客户端发来的信息
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//同理的,输出流也是一个缓存,所以下面发送的话,
//可能会有延迟的,要立即发送就调用flush方法,
//它会立即清空缓存并把信息发出去
//向客户端输出该字符串
os.println("来自服务器的消息!");
//刷新输出流,使Client马上收到该字符串
os.flush();
//在标准输出上打印从客户端读入的字符串
System.out.println("收到客户端的信息:"+is.readLine());
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket
}catch(Exception e){
e.printStackTrace();//出错,打印出错信息
}
}
}
客户端
client.java
package socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class client {
public static void main(String[] args) {
try{
System.out.println("客户端已打开!");
Socket socket=new Socket("127.0.0.1",7217);//创建socket并连接本机的7217端口
PrintWriter os=new PrintWriter(socket.getOutputStream());//输出流,本机到服务器
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//输入流,服务器到本机
System.out.println("收到来自服务器的消息:"+is.readLine());
os.println("这是来自客户端的消息!");//发送消息
os.flush();//推送
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
}catch(Exception e){
e.printStackTrace();//出错,打印出错信息
}
}
}
运行效果
服务器输出:
服务器已打开!
收到客户端的信息:这是来自客户端的消息!
客户端输出:
客户端已打开!
收到来自服务器的消息:来自服务器的消息!