------ <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.comtarget="blank">
java培训</a>、期待与您交流! ---------
<pre name="code" class="java"><strong><span style="font-family:Courier New;font-size:14px;">import java.net.InetAddress; import java.net.UnknownHostException; public class NetDemos { public static void main(String[] args) throws Exception { med1(); } private static void med1() throws Exception { // 获取本地主机IP地址对象 InetAddress ip = InetAddress.getLocalHost(); System.out.println("ip "+ip); System.out.println(ip.getHostAddress()); System.out.println(ip.getHostName()); System.out.println("-------------"); ip = InetAddress.getByName("www.baidu.com"); System.out.println(ip.getHostAddress()); System.out.println(ip.getHostName()); } }</span></strong>
<span style="font-family:Courier New;font-size:14px;"><strong>运行程序,结果显示:</strong></span>
<span style="font-family:Courier New;font-size:14px;">import java.io.*; import java.net.*; class NetDemos { public static void main(String[] args) throws Exception { // 创建一个UDP接收端 System.out.println("接收器---------"); /* * 建立UDP接收端的思路 * 建立udp的socket服务,接收数据,所以要明确一个端口 * 创建数据包,用于存储接收的数据,方便用户数据包对象的方法解析 * 使用socket服务的receive方法将接收的数据存储到数'E6��包中 * 通过数据凶的方法解析数据包中的数据 * 关闭资源*/ //建立udpsocket服务 DatagramSocket ds = new DatagramSocket(10000); //创建数据包 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //使用接收方法将数据存储到数据包中 ds.receive(dp); //通过数据包对象的方法,解析其中的数据, String ip = dp.getAddress().getHostAddress(); //获取的端口是发送端的端口号 int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+" =="+port + "=="+text); //关闭资源 ds.close(); } } class Goset { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub System.out.println("发送端启动-----"); /* * 创建UDP传输的发送端 * 1.建立udp的socket服务 * 2.将要发送的数据封装到数据包中 * 3.通过udp的socket服务将数据包发送出去 * 4.关闭socket服务*/ //使用DatagramSocket对象 //如果发送端端口未指定,就会随机分配未被使用的端口 DatagramSocket ds = new DatagramSocket(); //将要发送的数据封装到数据包中 String str = "udp 传输演示,数据" ; //使用DatagramPacket将数据封装3到该对象包中去 byte[] buf = str.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.3.4"),10000); //通过udp的socket服务将数据凶发送出去产,使用send方法 ds.send(dp); //关闭资源 ds.close(); } }</span>
注:
由于UDP协议传输数据,只管发送数据,而不管接收端是否能够接收到数据。因此,应该首先启动接收端程序,再启动发送端程序。
import java.io.*; import java.net.*; class Goset { public static void main(String[] args) throws Exception { System.out.println("发送消息端程序启动"); //创建一个UDP发送器,建立udpsocket服务 DatagramSocket ds = new DatagramSocket(); //创建一个接收数据 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null) { byte[] buf =line.getBytes(); //将数据封装 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.3.4"),10102); ds.send(dp); if("over".equals(line)) break; ds.close(); } } } class Recer { public static void main(String[] args) throws Exception { System.out.println("接收端启动---------"); DatagramSocket ds = new DatagramSocket(10102); while(true) { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+" "+port+" "+text); } } }
import java.io.*; import java.net.*; class Netdemos2 { public static void main(String[] args) { try { DatagramSocket goset = new DatagramSocket(); DatagramSocket recert = new DatagramSocket(10009); new Thread(new Goset(goset)).start(); new Thread(new Recert(recert)).start(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Recert implements Runnable { private DatagramSocket ds; Recert(DatagramSocket ds) { this.ds = ds; } public void run() { while(true) { try { byte[] buf= new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String txet = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+" "+port+" "+txet); if(txet.equals("over")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Goset implements Runnable { private DatagramSocket ds ; public Goset(DatagramSocket ds) { this.ds = ds ; } public void run() { BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; try { while((line=bufr.readLine())!=null) { byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.3.4"),10009); ds.send(dp); if("over".equals(line)) break; } ds.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
客户端(Client)首先与服务端(Server)建立连接,形成通道(其实就是IO流),然后,数据就可以在通道之间进行传输,并且单个Server端可以同时与多个Client端建立连接。
import java.io.*; import java.net.*; //客户端发送数据到服务端 class NetSerce {//创建一个TCP服务端 public static void main(String[] args) { //服务端接收客户端发送过来的数据,并打印到控制台上。 System.out.println("服务端启动"); //创建服务端的对象 ServerSocket ss; try { ss = new ServerSocket(10103); //接收客户端传输数据 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); int port = s.getPort(); //读取客户端发过来的数据 InputStream input = s.getInputStream(); byte[] buf = new byte[1024]; int len = buf.length; String text = new String(buf,0,len); System.out.println(ip+" "+text); s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Netdemos23 { public static void main(String[] args) { System.out.println("客户端启动"); try { // 创建TCP客户端,使用的是scoket对象 Socket s = new Socket("192.168.3.4",10103); //获取socket中的输出流 OutputStream sOut = s.getOutputStream(); //使用输出流将指定的数据写出去 sOut.write("is my worked".getBytes()); //断开连接,关闭资源 sOut.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
TCP协议传输数据必须先开服务端,再开客户端。否则,客户端根本连接不上服务端
<span style="font-family:Courier New;font-size:14px;">import java.io.*; import java.net.*; </span><span style="font-family:KaiTi_GB2312;font-size:14px;color:#ff6666;">//建立一个文本转换服务器, /*客户端经服务端发送文本,服务端会将文本转成大写在返回给客户端 * 而且客户端可以不断的进行文本转换,当客户端输over时,转换结束</span>
<span style="color: rgb(255, 102, 102); font-family: KaiTi_GB2312;font-size:14px;">*/</span>
<span style="font-family:Courier New;font-size:14px;"> class TransClient { public static void main(String[] args) throws UnknownHostException, IOException { // 创建socket客户端对象 Socket s = new%s0Socket("192.168.3.4",10004); //定义读取键盘数据的流对象 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //定义目的,将数据写入到socket输出流,发给服务端 BufferedWriter bufwout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //定义一个socket 读取流,读取服务端返回的大写信息 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line = bufr.readLine())!=null) { bufwout.write(line); bufwout.newLine(); bufwout.flush(); String str = bufIn.readLine(); System.out.println(str); if("over".equals(line)) break; } bufr.close(); s.close(); } } /* * */ class TransServer { public static void main(String[] args) throws Exception { // ServerSocket ss = new ServerSocket(10004); Socket s = ss.accept(); //读取socket流中的数据 BufferedReader bufIn= new BufferedReader(new InputStreamReader(s.getInputStream())); //目的,socket输出流,将大写数据写入,并发送给客户端 BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip); String line = null; while((line = bufIn.readLine())!=null) { bufOut.write(line.toUpperCase()); bufOut.newLine(); bufOut.flush(); } s.close(); ss.close(); } </span> }
<span style="font-family:FangSong_GB2312;color:#333333;font-weight: bold;">//通过Tcp上传图片</span><strong><span style="color:#000099;font-family: 'Courier New';"> import java.io.*; import java.net.*; </span><span style="font-family:FangSong_GB2312;color:#333333;"> //客户端</span><span style="color:#000099;font-family: 'Courier New';"> class PicClient { public static void main(String[] args) throws Exception { // Socket s = new Socket("192.168.3.4",10006); FileInputStream fis = new FileInputStream("E:\\10.jpg"); OutputStream out = s.getOutputStream(); byte[] buf= new byte[1024]; int len = 0; while((len = fis.read(buf))!=-1) { out.write(buf,0,len); } </span><span style="font-family:FangSong_GB2312;color:#333333;">//提示数据已读完</span><span style="color:#000099;font-family: 'Courier New';"> s.shutdownOutput(); InputStream in = s.getInputStream(); byte[] bufIn = new byte[1024]; int num =in.read(bufIn); System.out.println(new String(bufIn,0,num)); fis.close(); s.close(); } } </span><span style="font-family:FangSong_GB2312;color:#333333;">/* * 服务端*/</span><span style="color:#000099;font-family: 'Courier New';"> class PicServer { public static void main(String[] args) throws Exception { // ServerSocket ss = new ServerSocket(10006); Socket s =ss.accept(); InputStream in = s.getInputStream(); FileOutputStream fos = new FileOutputStream("111.bmp"); byte[] buf = new byte[1024]; int len = 0; while((len = in.read(buf))!=-1) { fos.write(buf,0,len); } OutputStream out = s.getOutputStream(); out.write("上传成功".getBytes()); fos.close(); s.close(); ss.close(); } }</span></strong><span style="color:#ff0000;"> </span>实现多个客户端访问服务器
<span style="font-size:18px;">//通过Tcp上传图片 </span><strong><span style="font-family:Courier New;font-size:14px;color:#3333ff;">import java.io.*; import java.net.*; class Seeyou implements Runnable { private Socket s; Seeyou(Socket s) { this.s = s; } public void run() { try { String ip = s.getInetAddress().getHostAddress(); InputStream in = s.getInputStream(); FileOutputStream fos = new FileOutputStream(ip+"111.bmp"); byte[] buf = new byte[1024]; int len = 0; while((len = in.read(buf))!=-1) { fos.write(buf,0,len); } OutputStream out = s.getOutputStream(); out.write("上传成功".getBytes()); fos.close(); s.close(); } catch(Exception e) { } } } //客户端 class PicClient { public static void main(String[] args) throws Exception { System.out.println("客户端启动"); // Socket s = new Socket("192.168.3.4",10006); FileInputStream fis = new FileInputStream("E:\\10.jpg"); OutputStream out = s.getOutputStream(); byte[] buf= new byte[1024]; int len = 0; while((len = fis.read(buf))!=-1) { out.write(buf,0,len); } //提示数据已读完 s.shutdownOutput(); InputStream in = s.getInputStream(); byte[] bufIn = new byte[1024]; int num =in.read(bufIn); System.out.println(new String(bufIn,0,num)); fis.close(); s.close(); } } /* * 服务端*/ class PicServer { public static void main(String[] args) throws Exception { System.out.println("服务端启动"); // ServerSocket ss = new ServerSocket(10006); while(true) { Socket s =ss.accept(); new Thread(new Seeyou(s)).start(); } } }</span></strong><span style="font-size:18px;"> </span>