网络编程
网络模型相当于固话机,在某一频段上。开着就能收到。
服务端:
import java.net.DatagramPacket; import java.net.DatagramSocket; /** * 需求:定义一个应用程序,用于接收udp协议 * 传输的数据服务并处理。 * 思路:1.定义一udpsocket服务,通常会指定一个监听端口, * 其实就是给这个接收网络应用程序定久数字标识,方便 * 于明确哪些应用程序发消息过来。 * 2.定义一个数据包,因为要存储接收到的字节 * 数据,因为数据包对象中有更多功能可以提取 * 字节数据中的不同的数据信息。 * 3.通过socket服务的receive方法将收到的数据 * 存入已定义好的数据包中。 * 4.通过数据包对象的特有功能,将这些不同的数 * 据取出,打印在控制台上。 * 5.关闭资源。 * @author hjl * */ public class UDPReceive { //接收端的内容都来自10000端口。 public static void main(String [] args)throws Exception{ //1.创建udp socket,建立端点。 DatagramSocket ds=new DatagramSocket(10000); while(true){ //2.定义数据包,用于存储,分析这个缓冲区, byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf, buf.length); //3.通过服务的receive方法将收到数据存入数据包中。 ds.receive(dp);//这是一个阻塞式方法 //4.通过数据包中的方法获取其中的对象。 String ip =dp.getAddress().getHostAddress(); String data=new String(dp.getData(),0,dp.getLength()); int port=dp.getPort(); System.out.println(ip+"::"+data+"::"+port); //这个port是系统随机给发送端应用程序的一个标识 //数据是从port出来的。发送至接收端的10000端口 } //关闭资源 //ds.close(); } }
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 需求:通过udp传输方式,将一段文字数据发送出去 * 思路:1.建立udpSocket服务。 * 2.提供数据,并将数据封装到数据包中。 * 3.通过Socket服务的发送功能,将数据包发出去。 * 4.关闭数据。 * @author hjl * */ public class UDPSend { public static void main(String [] args)throws Exception { //1.创建udp服务,通过DatagramSocket对象。 DatagramSocket ds=new DatagramSocket(8888);//我们也可以在这里指定端口 //2.确定数据,并封装成数据包,DatagramSocket(byte[] buf,int length,InetAddress address,int port) byte[] buf="zhe shi udp shuju".getBytes(); DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.196.12"),10000); //3.通过Socket服务,将已有的数据包发送出去。通过send方法 ds.send(dp); ds.close(); } }
服务端:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceive2 { public static void main(String [] args) throws Exception{ DatagramSocket ds=new DatagramSocket(10001); while(true){ byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf, buf.length); ds.receive(dp);//阻塞式方法 String ip=dp.getAddress().getHostAddress(); String data=new String (dp.getData(),0,dp.getLength()); System.out.println(ip+"::"+data); } } }
客户端:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSend2 { public static void main(String [] args)throws Exception{ DatagramSocket ds=new DatagramSocket(); BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); String line=null; while((line=bufr.readLine())!=null){//readline也是阻塞式方法 if("886".equals(line)) break; byte[] buf=line.getBytes(); DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.196.12"),10001); ds.close(); } } }
import java.io.*; import java.net.*; class TextClient { public static void main(String [] args) throws IOException{ Socket s= new Socket("192.168.1.254",10006); BufferedReader bufr=new BufferedReader(new FileReader("client.java");//这个文件一定要判断,是否存在。 PrintWriter out=new PrintWriter(s.getOutPutStream(),true); //判断标识 DataOutputStream dos=new DataOutputStream(s.getoutputStream()); longtime=System.currentTimeMills(); dos.writeLong(time); String line=null; While((line=bufr.readLine())!=null){ out.println(line); } s.shutdownOutput();//关闭客户端的输出流。相当于给注中加入一个结束标识。 dos.writeLong(time); //out.println("over"); BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream())); String str=bufIn.readLine(); System.out.println(str); bufr.close(); s.close(); } }
class TextServer{ public static void main(String [] args){ ServerSocket ss=new ServerSocket(10006); Socket s=ss.accept(); String ip=s.getInetAddress().getHostAddress(); System.out.println(ip+"....is connected"); //判断标识 DataInputStream dis=new DataInputStream(s.getInputStream()); long l=dis.readLong();//把时间戳读完 BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter out=new PrintWriter(new FileWriter("server.txt"),true); String line=null; while((line=bufIn.readLine())!=null){ //if("over".equals(line)) //break; out.println(line); } PrintWriter pw=new PrintWriter(s.getOutputStream().true); pw.println("上传成功"); out.close(); s.close(); ss.close(); } }