目录
一、InetAddress类(获取IP地址)
/** * InetAddress类没有提供公共的构造器,而是提供了如下几个静态方法来获取 InetAddress实例 public static InetAddress getLocalHost() * public static InetAddress getByName(String host * InetAddress提供了如下几个常用的方法 * public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。 * public String getHostName():获取此 IP 地址的主机名 * public boolean isReachable(int timeout):测试是否可以达到该地址 * */
二、Socket类的常用构造器和常用方法
/** * Socket类的常用构造器: * public Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 * public Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号。 * Socket类的常用方法: * public InputStream getInputStream()返回此套接字的输入流。可以用于接收网络消息 * public OutputStream getOutputStream()返回此套接字的输出流。可以用于发送网络消息 * public InetAddress getInetAddress()此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。 * public InetAddress getLocalAddress()获取套接字绑定的本地地址。 即本端的IP地址 * public int getPort()此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0。 * public int getLocalPort()返回此套接字绑定到的本地端口。 如果尚未绑定套接字,则返回 -1。即本端的端口号。 * public void close()关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接 * 或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和OutputStream。 * public void shutdownInput()如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将 * 返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。 * public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发 * 送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流, * 则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。 */
服务器端代码
ublic class ServerTest {
public static void main(String[] args) {
ServerSocket socket=null;
Socket socket1=null;
InputStream is=null;
BufferedReader br=null;
OutputStream os =null;
try {
socket=new ServerSocket(10086);
//服务器通过监听方法来获取客户端的请求
socket1=socket.accept();
//通过返回的Socket对象调用方法获取一个输入流来读取客户端发送过来的消息
is=socket1.getInputStream();
//通过输入流读取客户端发送的消息
br=new BufferedReader(new InputStreamReader(is));
String str =br.readLine();
System.out.println("我是服务器,客户端发送给我的数据是"+str);
socket1.shutdownInput();
//服务器接受客户端消息后,需要给客户端一个响应信息
os = socket1.getOutputStream();
String str1="用户名和密码正确,可以登录";
byte[] bytes = str1.getBytes();
os.write(bytes);
System.out.println("给客户但发送成功");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
socket1.close();
is.close();
br.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码
public abstract class ClientTest {
public static void main(String[] args) {
Socket socket=null;
OutputStream outputStream=null;
InputStream inputStream =null;
BufferedReader bufferedReader =null;
//创建通信链路的断电客户套接字
try {
socket=new Socket("127.0.0.1",10086);
//获取输出流将数据发送出去
outputStream=socket.getOutputStream();
String str="用户名,张三;密码、123456";
byte[] bytes = str.getBytes();
//通过输出流调用方法将信息发送出去
outputStream.write(bytes);
//关闭通道
socket.shutdownOutput();
//客户端需要通过输入流读取服务器端发送过来的消息
inputStream = socket.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String str1= bufferedReader.readLine();
System.out.println("我是客户端,接收到的服务器端响应信息为:"+str1);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}