引用
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
客户端
//1.创建客户机套接字 clientSocket = new Socket(); //获取服务器地址 //InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址 //InetSocketAddress是SocketAddress的实现子类 SocketAddress remoteAddr=new InetSocketAddress("localhost",5000); System.out.println("1.创建客户机套接字成功!"); //2.连接服务器 clientSocket.connect(remoteAddr); System.out.println("2.客户机连接服务器localhost端口5000成功!"); System.out.println("客户机使用的地址和端口:"+clientSocket.getLocalSocketAddress());
netSocketAddress是SocketAddress的实现子类。
此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。
在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用SocketAddress类来向connect方法传递服务器的IP和端口。
SocketAddress只是个抽象类,它除了有一个默认的构造方法外,其它的方法都是abstract的,因此,我们必须使用SocketAddress的子类来建立SocketAddress对象,也就是唯一的子类InetSocketAddress
————————————————
原文链接:https://blog.csdn.net/itkool/article/details/78950128
//与服务器会话 in = new BufferedReader(//缓冲 new InputStreamReader( clientSocket.getInputStream())); out = new BufferedWriter( new OutputStreamWriter( clientSocket.getOutputStream())); String sendStr="hello"; out.write(sendStr); //向服务器发送字符串 out.newLine();//换行 out.flush();//立即发送 System.out.println("3.1向服务器发送字符串成功!"+sendStr); String recvStr=in.readLine(); //从服务器接收字符串 //readLine()是读取流读数据的时候用的,同时会以字符串形式返回这一行的数据,当读取完所有的数据时会返回null //没有数据时会阻塞,在数据流异常或断开时才会返回null System.out.println("3.2从服务器接收回送字符串成功!"+recvStr);
服务端
listenSocket = new ServerSocket(); SocketAddress serverAddr=new InetSocketAddress("localhost",5000); listenSocket.bind(serverAddr); System.out.println("1.服务器启动成功!开始在localhost的5000端口侦听连接..."); //2.处理连接 clientSocket = listenSocket.accept(); System.out.println("2.客户机连接成功!客户机地址和端口:"+clientSocket.getRemoteSocketAddress()); //3.与客户机会话 in = new BufferedReader( new InputStreamReader( clientSocket.getInputStream())); out = new BufferedWriter( new OutputStreamWriter( clientSocket.getOutputStream())); String recvStr=in.readLine(); //从客户机接收字符串 System.out.println("3.1 服务器收到字符串:"+recvStr); out.write(recvStr); //向客户机回送字符串 out.newLine(); out.flush(); System.out.println("3.2 服务器回送字符串成功:"+recvStr);
关闭套接字和流
try { if (in != null)in.close(); if (out != null) out.close(); if (listenSocket != null) listenSocket.close(); if (clientSocket != null) clientSocket.close(); System.out.println("4.关闭套接字和流成功!"); } catch (IOException ex) { System.out.println("异常信息"+ex.getMessage()); }