目录
一、IP地址
import java.net.InetAddress;
public class Test {
public static void main(String[] args) throws Exception{
String ip = "10.201.48.159";
String host = "localhost";
//IP地址包装类
InetAddress Inet = InetAddress.getByName(host);
System.out.println(Inet);
System.out.println(Inet.getHostAddress());
System.out.println(Inet.getHostName());
}
}
二、UDP协议
接收方
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Receiver {
public static void main(String[] args) throws Exception{
//创建socket对象,需输入接收端口
DatagramSocket ds = new DatagramSocket(1888);
byte[] bys = new byte[1024];
//创建数据报对象
DatagramPacket dp = new DatagramPacket(bys,bys.length);
while(true) {
//等待接受数据报
ds.receive(dp);
//数据报拆解
System.out.println("接受数据为:" + new String(dp.getData(), 0, dp.getLength()));
}
}
}
发送方
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Sender {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//创建socket对象,是通信工具
DatagramSocket socket = new DatagramSocket();
String line;
while((line = br.readLine())!=null){
//end就结束
if("end".equals(line)) {
break;
}
byte[] bys = line.getBytes();
//封装udp数据报包
DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),1888);
//发送数据报
socket.send(dp);
}
//关闭对象
socket.close();
}
}
三、TCP协议
服务端
import java.io.*;
import java.net.Socket;
public class ReceivedThread extends Thread {
private Socket accept;
public ReceivedThread(Socket accept) {
this.accept = accept;
}
@Override
public void run() {
BufferedWriter bw = null;
try {
//文件名查重
int num = 2;
File file = new File("E:/Study/" + num + ".txt");
while(file.exists() == true){
num += 1;
file = new File("E:/Study/" + num + ".txt");
}
//创建高效字符输出流
bw = new BufferedWriter(new FileWriter(file));
BufferedReader br = new BufferedReader(new InputStreamReader(accept.getInputStream()));
//读取socket输入流内容写入字符输出流
String line;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
}
System.out.println("接受文件成功");
//反馈客户端
BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
bw2.write("上传文件成功");
bw2.newLine();
bw2.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
try{
//若创造了字符输出流则关闭,并GC回收
if(bw != null){
bw.close();
bw = null;
}
}catch (IOException e){
e.printStackTrace();
}finally {
//若以创造了Socket对象则关闭,并GC回收
try {
if (accept != null) {
accept.close();
accept = null;
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Receiver {
public static void main(String[] args) throws IOException {
//创建服务端socket套接字对象
ServerSocket serve = new ServerSocket(1888);
//接受到一个请求就打开一个服务线程
while (true){
Socket accept = serve.accept();
new ReceivedThread(accept).start();
}
}
}
客户端
import java.io.*;
import java.net.Socket;
public class Sender {
public static void main(String[] args) throws Exception{
//创建Socket对象
Socket client = new Socket("127.0.0.1",1888);
//创建字符输入流对象
BufferedReader br = new BufferedReader(new FileReader("E:/Study/1.txt"));
//将socket输出流用高效输出流封装
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
//读取文件并写入socke输出流
String line;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
}
//输出结束,告知服务端
client.shutdownOutput();
//接受服务端反馈
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String answer = br.readLine();
System.out.println(answer);
}
}