InetAddress
java.net包下提供的类
通过InetAddress可以获得本机一些网络信息
特点:
- 单例模式,全局一份
InetAddress localHost = InetAddress.getLocalHost() ;
System.out.println(localHost);
//DESKTOP-AS6LJ9L/127.0.0.1
String host = localHost.getHostAddress();
System.out.println(host);
//127.0.0.1
String hostName = localHost.getHostName() ;
System.out.println(hostName);
//DESKTOP-AS6LJ9L
UDP通信互联聊天功能
服务端实现UDP接收数据
import sun.security.util.Length;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpServer {
public static void main(String[] args) {
//接收数据报的Socket
DatagramSocket ds = null ;
try {
//socket绑定端口
ds = new DatagramSocket(10000) ;
//数据接收完以以二进制存储,我们无法读,在下面转化为字符串
byte[] bs = new byte[1024];
//数据报对象
DatagramPacket dp = new DatagramPacket(bs,bs.length) ;
while (true) {
//阻塞接收10000端口号
ds.receive(dp);
//get ip
InetAddress inetAddress = dp.getAddress();
//获得数据
byte[] data = dp.getData() ;
//获得数据长度
int len = dp.getLength() ;
//数据转化为字符串
String str = new String(data,0, len) ;
System.out.println(inetAddress.getHostAddress()+"发送的数据是:"+str);
}
客户端发送数据
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpClient {
public static void main(String[] args) {
DatagramSocket ds = null ;
BufferedReader reader = null ;
try {
ds = new DatagramSocket() ; //客户端socket
//从系统输入读取
reader = new BufferedReader(new InputStreamReader(System.in)) ;
String line = null ;/*使用buffer读必备*/
//死循环
while ((line = reader.readLine()) != null){
if ("exit".equals(line))
break;
byte[] bs = line.getBytes() ;//以字节byte形式打包发出
/*创建数据包
* 参数一:字节数组
* 参数二:数组长度
* 参数三:发送到哪
* 参数四:端口号
* */
DatagramPacket dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),10000) ;
ds.send(dp);
}
TCP通信实现聊天功能
服务端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) {
//服务端socket
ServerSocket ss = null ;
//客户端socket
Socket s = null ;
BufferedReader reader =null ;
try {
//监听10000
ss = new ServerSocket(10000) ;
//阻塞接收
s = ss.accept() ;
InputStream in = s.getInputStream() ;
while (true) {
reader = new BufferedReader(new InputStreamReader(in));
//
String line = reader.readLine();
if ("exit".equals(line)){
System.out.println("服务关闭");
break;}
//获取客户端信息
InetAddress address = s.getInetAddress();
String ip = address.getHostAddress();
System.out.println(ip + "发送了:" + line);
}
客户端:
import java.io.*;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) {
//客户端socket
Socket s = null ;
BufferedWriter writer = null ;
BufferedReader reader = null ;
try {
//socket
s = new Socket("127.0.0.1",10000) ;
OutputStream out = s.getOutputStream() ;
writer = new BufferedWriter(new OutputStreamWriter(out)) ;
//从控制台读取
reader = new BufferedReader(new InputStreamReader(System.in)) ;
String line = null ;
while (true) {
//读取控制台数据
line = reader.readLine() ;
//out
writer.write(line);
writer.newLine();
writer.flush();
if ("exit".equals(line)){
System.out.println("服务关闭");
break;
}}