网路连接
**
InetAddress
**
## 标题 ##查看IP地址和主机名
try {
InetAddress address = InetAddress.getLocalHost();
System.out.println("IP地址" + address.getHostAddress());
System.out.println("主机名" + address.getHostName());
System.out.println(Arrays.toString(address.getAddress()));
} catch (UnknownHostException e) {
e.printStackTrace();
}
输出:IP地址192.168.0.75
主机名lingzhuo25-4
[-64, -88, 0, 75]
TCP协议
总结:
这里不需要去专门处理等待和发送机制
它会直接把信息储存到电话线中
你只需要去读取它就行了
一个客户端
public class MyClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("192.168.0.75", 8080);
System.out.println("客户端");
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
Scanner scanner = new Scanner(System.in);
while (true) {
String s = scanner.next();
bw.write(s + "\n");//等待写出数据
bw.flush();
String s1 = br.readLine();//等待把服务器返回的数据读入
System.out.println("服务器返回的数据: " + s1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
一个服务器
public class MyServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8080);
System.out.println("服务器");
Socket socket = server.accept();// 等待客户端连接
//System.out.println("接收到连接");
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
Scanner scanner = new Scanner(System.in);
while (true) {
String s = br.readLine();// 等待客户端来数据
System.out.println("客户端发送的数据: " + s);
String s1 = scanner.next();
bw.write(s1 + "\n");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
DUP协议
总结:
因为没有线连接它们两个所以必须去写一个接收(receive)
和发送(send),在这里是将它们打包(packet)
DatagramPacket在接收中没有具体地址的实现
DatagramPacket(array,array.length)
Datagrampacket在发送中有具体地址的实现
DatagramPacket(array,array.length, InetAddress.getByName(“192.168.0.75”),8080);
一个发送者
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class Mysend {
public static void main(String[] args) {
try {
DatagramSocket sender=new DatagramSocket();
String s="sdsad";
byte [] array=s.getBytes();
//创建一个包,如果要确保接受的到就要指名地址和端口;
//把要发送的数据打包
DatagramPacket packet=new DatagramPacket(array,array.length, InetAddress.getByName("192.168.0.75"),8080);
sender.send(packet);//发送包
sender.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
一个接收者
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Myrecive {
public static void main(String[] args) {
try {
DatagramSocket receiver=new DatagramSocket(8080);//创建接受着的端口
byte[] array=new byte[1024];
DatagramPacket packet=new DatagramPacket(array,array.length);//首先创建一个包
receiver.receive(packet);//然后把数据接收到一个包中
byte [] array1=packet.getData();//因为数据是字节类型的必须把字节类型转换为字符串类型,才能打印出来。
String s=new String(array1);//将字节类型转换为字符串类型。
System.out.println(s );
receiver.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
一个发送者
package com.lingzhuo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class Sender {
public static void main(String[] args) {
try {
DatagramSocket sender=new DatagramSocket(8080);
//byte [] array=new byte [1024];
Scanner scanner =new Scanner(System.in);
while(true){
System.out.println("发送者要说的话: ");
String s=scanner.next();
byte [] array=s.getBytes();
DatagramPacket packet=new DatagramPacket(array, 0,array.length, InetAddress.getByName("192.168.0.75"),8080);
sender.send(packet);
byte []array1=new byte[1024];
DatagramPacket packet1=new DatagramPacket(array1, array1.length);
sender.receive(packet1);
byte []array2=packet1.getData();
// String s1=new String(array2) 用这个的时候可能不会把包中的数据读完
String s1=new String(array2,0,packet1.getLength());
System.out.println("发送者收到的话: "+s1);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
一个接受者
package com.lingzhuo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class Receiver {
public static void main(String[] args) {
try {
DatagramSocket receiver=new DatagramSocket(8080);//相当于创建一个邮箱并且说明邮箱的地址以便接收到邮件
Scanner scanner=new Scanner(System.in);
byte [] array=new byte[1024];
while(true){
DatagramPacket packet=new DatagramPacket(array,array.length);
receiver.receive(packet);
byte[]array1=packet.getData();
String s=new String(array1,0,packet.getLength());
System.out.println("接受者收到的话: "+s);
String s1=scanner.next();
byte[] array2=s1.getBytes();
DatagramPacket packet1=new DatagramPacket(array2, 0,array2.length,InetAddress.getByName("192.168.0.75"),8080);
receiver.send(packet1);
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}