ServerSocket服务端 Socket客户端
1.服务端程序创建ServerSocket对象,调用accept()方法,等待客户端连接。
2.客户端程序创建Socket对象并请求与服务端建立连接。
3.服务端接收客户端的连接请求,并创建新的Socket对象与客户端建立专线连接。
4.实现(2)和(3)步骤中建立连接的两个Socket类在同一线程上对话。
5.服务端重新等待新的连接请求。
服务端ServerSocket对象用户监听是来自客户端的Socket类连接,如果没有连接,它会一直处于等待状态。
方法 | 说明 | public ServerSocket(int port) | 构造方法,用指定port(端口)创建ServerSocket类 | public Socket accept() | 接收客户端的Socket类请求 | public InetAddress getInetAddress() | 返回服务端主机IP地址 | public void close() | 关闭ServerSocket类 |
客户端使用Socket类连接到指定的服务端,每个Socket对象代表一个客户端
方法 | 说明 | public Socket(String host,int port) | 构造方法,创建连接到指定远程主机和端口的Socket实例,传入host(主机IP)和port(端口) | public InputStream getInputStream() | 返回该Socket对象对应的输入流 | public OutputStream() | 返回该Socket对象对应的输出流 | public void close() | 关闭当前的Socket |
服务端:
public static void main(String[] args){
ServerSocket server = null;
BufferedReader reader = null;
String data = null;
try {
//创建客户端套接字,监听端口8888
server = new ServerSocket(8888);
while(true) {
//接收客户端的连接
Socket socket = server.accept();
//获取客户端的输入流
InputStream in = socket.getInputStream();
//将字节流包装成字符流
reader = new BufferedReader( new InputStreamReader(in) );
//判断输入流内的数据是否读取完毕
while( (data = reader.readLine()) != null ) {
System.out.println("客户端:"+data);
}
break;
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if( reader != null ) {
reader.close();
}
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端:
public static void main(String[] args) {
Socket client = null;
PrintWriter writer = null;
try {
//创建客户端套接字,并连接服务器
client = new Socket("127.0.0.1",8888);
//创建一个可以向服务器发送数据的输出对象
writer = new PrintWriter(client.getOutputStream());
//向服务端写入数据
writer.write("halo");
//清空输出缓存
writer.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if( writer!=null ) {
writer.close();
}
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|