1.InetAddress的使用
/**
* 主机地址
*/
public class InetAddressTest {
public static void main(String[] args) throws UnknownHostException {
//通过主机名获得对象
InetAddress inetAddress=InetAddress.getByName("LAPTOP-VB8QSKVB");
//得到ip
String ip = inetAddress.getHostAddress();
String hostName = inetAddress.getHostName();
System.out.println("ip:"+ip);
System.out.println("主机名:"+hostName);
}
}
2.UDP
/**
* udp 快速入门 发送口
*/
public class UdpSend {
public static void main(String[] args) throws IOException {
//socket 子类
DatagramSocket ds=new DatagramSocket();
InetAddress inetAddress=InetAddress.getByName("LAPTOP-VB8QSKVB");
//封装数据
byte[] data="hello i am udp".getBytes();
int len=data.length;
DatagramPacket packet=new DatagramPacket(data,0,len,inetAddress,10086);
//发送数据
ds.send(packet);
//关闭DatagramSocket
ds.close();
}
}
/**
* udp 接收口
*/
public class UdpReceive {
public static void main(String[] args) throws IOException {
//通过port构造
DatagramSocket ds=new DatagramSocket(10086);
//用于接受数据
byte[] rdata=new byte[1024];
DatagramPacket data=new DatagramPacket(rdata,rdata.length);
//接受数据
ds.receive(data);
byte[] bytes = data.getData();
int len=bytes.length;
String receive = new String(bytes,0,len);
System.out.println(receive);
//释放资源
ds.close();
}
}
先运行接收口 在 运行 发送口
3.TCP
/**
* tcp获取数据
*/
public class TcpReceive {
public static void main(String[] args) throws IOException {
//创建服务器对象
ServerSocket serverSocket = new ServerSocket(10000);
//获取数据
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
//创建数据容器
byte[] data = new byte[1024];
int read = inputStream.read(data);
//转字符串
String str = new String(data, 0, data.length);
System.out.println(str);
serverSocket.close();
}
}
/**
* tcp 快速入门 发送端口
*/
public class TcpSend {
public static void main(String[] args) throws IOException {
//tcp核心类
Socket tcp = new Socket("192.168.59.1", 10000);
OutputStream out = tcp.getOutputStream();
//写出数据
byte[] data = "hello i am tcp".getBytes();
out.write(data, 0, data.length);
tcp.close();
out.close();
}
}
4.聊天程序
/**
* 聊天程序案列 客户端
*/
public class Client {
public static void main(String[] args) throws IOException {
//tcp客户端
Socket s=new Socket("192.168.59.1",10000);
System.out.println("--------------------客户端启动-----------------------------");
//数据键盘读取
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
InputStream in = s.getInputStream();
String line;
//不是bye就一直执行 同时从键盘读且给line
while ((line=br.readLine())!=null){
if (line.equals("bye")){
break;
}
//客户端发送数据
bw.write(line);
//换行
bw.newLine();
//刷新数据
bw.flush();
//客户端接收数据
byte[] data=new byte[1024];
in.read(data);
String msg=new String(data,0, data.length);
System.out.print("服务端:");
System.out.println(msg);
}
//释放资源
s.close();
}
}
/**
* 聊天程序案列 服务端
*/
public class Server {
public static void main(String[] args) throws IOException {
//服务端
System.out.println("--------------------服务端启动-----------------------------");
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept();
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
OutputStream out = s.getOutputStream();
String line;
while ((line= br.readLine())!=null){
if (line.equals("bye")){
break;
}
System.out.print("客户端:");
System.out.println(line);
//服务端写数据
if (read!=null) {
String data = read.readLine();
out.write(data.getBytes(), 0, data.getBytes().length);
}
}
ss.close();
}
}
先运行服务端 在运行客户端 先客户端发送数据