网路连接

网路连接

**

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();
		}
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值