1 InetAddress类
public class InetAddressBaseMethod {
public static void main(String[] args) throws UnknownHostException {
//1.获取本机 InetAddress 对象
InetAddress host1 = InetAddress.getLocalHost();
System.out.println(host1);
//2.根据主机名/域名获取 InetAddress 对象
InetAddress host2 = InetAddress.getByName("LAPTOP-JUBVGF02");
System.out.println(host2);
InetAddress host3 = InetAddress.getByName("www.baidu.com");
System.out.println(host3);
//3.获取对象的主机名/域名
String hostName = host1.getHostName();
System.out.println(hostName);
//4.获取对象的ip地址
String hostAddress = host1.getHostAddress();
System.out.println(hostAddress);
}
}
2 基于Socket的TCP编程
2.1 使用字节流,完成C/S的通讯过程
public class SocketServer {
public static void main(String[] args) throws IOException {
//1.在本机8081端口监听,serverSocket可以通过accept()返回多个Socket
ServerSocket serverSocket = new ServerSocket(8081);
//2.等待客户端连接8081端口,阻塞等待
Socket socket = serverSocket.accept();
//3.读取客户端写入到数据通道的数据
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[64];
int len;
while ((len = inputStream.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
//4.写回传递给客户端的数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("get your msg".getBytes());
//设置结束标记
socket.shutdownOutput();
//5.关闭连接
outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
public class SocketClient {
public static void main(String[] args) throws IOException {
//1.连接服务器(ip,port)
Socket socket = new Socket("192.168.137.1",8081);
//2.写入传递给服务器端的数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello server".getBytes());
//设置结束标记
socket.shutdownOutput();
//3.读取服务器传递的数据
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[64];
int len;
while ((len = inputStream.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
//4.关闭连接
inputStream.close();
outputStream.close();
socket.close();
}
}
2.2 使用字符流,完成C/S的通讯过程
public class SocketServer {
public static void main(String[] args) throws IOException {
//1.在本机8081端口监听,serverSocket可以通过accept()返回多个Socket
ServerSocket serverSocket = new ServerSocket(8081);
//2.等待客户端连接8081端口,阻塞等待
Socket socket = serverSocket.accept();
//3.读取客户端写入到数据通道的数据
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = br.readLine();
System.out.println(readLine);
//4.写回传递给客户端的数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("get your msg");
bw.newLine();
bw.flush();
//5.关闭连接
bw.close();
br.close();
socket.close();
serverSocket.close();
}
}
public class SocketClient {
public static void main(String[] args) throws IOException {
//1.连接服务器(ip,port)
Socket socket = new Socket("192.168.137.1",8081);
//2.写入传递给服务器端的数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("hello server");
bw.newLine();
bw.flush();
//3.读取服务器传递的数据
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = br.readLine();
System.out.println(readLine);
//4.关闭连接
br.close();
bw.close();
socket.close();
}
}
3 基于Socket的UDP编程
public class SocketServer {
public static void main(String[] args) throws IOException {
//1.创建一个 DatagramSocket 对象,准备在8081端口接收数据
DatagramSocket socket = new DatagramSocket(8081);
//2.构建 DatagramPacket 对象,准备接收数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//3.调用接收方法,阻塞等待
socket.receive(packet);
//4.拆包,取出数据并显示
int length = packet.getLength();
byte[] data = packet.getData();
System.out.println(new String(data,0,length));
//5.回复消息
buf = "get your msg".getBytes();
packet = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.137.1"),8082);
socket.send(packet);
//6.关闭资源
socket.close();
}
}
public class SocketClient {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(8082);
byte[] data = "hello server".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.137.1"),8081);
socket.send(packet);
byte[] buf = new byte[1024];
packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
int length = packet.getLength();
data = packet.getData();
System.out.println(new String(data,0,length));
socket.close();
}
}
网友评论