两个客户端去服务端请求获取数据,服务端分别返回给客户端。
InetAddress
此类表示互联网协议 (IP) 地址。
package com.njlife123.qzmall;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IntetAddressTest {
public static void main(String[] args) {
try {
//localhost = 127.0.0.1
InetAddress byName = InetAddress.getByName("localhost");
System.out.println(byName.getHostAddress());//获取ip地址
System.out.println(byName.getHostName());//服务器名
System.out.println(byName.isReachable(10000));//判定节点是否可达
} catch (Exception e) {
e.printStackTrace();
}
}
}
URL
类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针.
Url格式:协议://服务器IP:端口号/资源路径
package com.njlife123.qzmall;
import java.io.InputStream;
import java.net.*;
public class IntetAddressTest {
public static void main(String[] args) {
try {
String url ="http://www.njlife123.com/article/64";
URL url1 = new URL(url);
System.out.println("主机ip:"+url1.getHost());
System.out.println("协议:"+url1.getProtocol());
System.out.println("端口号:"+url1.getPort());
System.out.println("资源路径:"+url1.getPath());
URLConnection connection = url1.openConnection();
connection.connect();
if(connection instanceof HttpURLConnection){
HttpURLConnection http = (HttpURLConnection) connection;
InputStream in = http.getInputStream();
int data = -1;
while ((data = in.read())!= -1){
System.out.print((char)data);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
打印结果
主机ip:www.njlife123.com
协议:http
端口号:-1
资源路径:/article/64
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
省略 。。。
Socket
聊天案列
server端:
package com.njlife123.qzmall.clazz;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8080);
List<Socket> clientList = new ArrayList<>();
while (true){
Socket accept = server.accept();
if( clientList.add(accept)){
System.out.println("连接成功");
}
InputStream in = accept.getInputStream();
DataInputStream dataIn = new DataInputStream(in);
do {
String msg = dataIn.readUTF();
System.out.println(msg);
if("bye".equals(msg)){
break;
}
}while (true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
client端
package com.njlife123.qzmall.clazz;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",8080);
DataOutputStream sendData = new DataOutputStream(socket.getOutputStream());
Scanner scanner = new Scanner(System.in);
do {
String sendMsg = scanner.nextLine();
sendData.writeUTF(sendMsg);
if("bye".equals(sendMsg)){
break;
}
}while (true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
遗留问题
大家可以根据学习多线程知识,结合多线程开发一款聊天工具。
作者简介:一个有故事的程序员,我的微信号qiushuzhao222,欢迎大家找我聊天,记录你我的故事。