Java网络编程的基本使用

来源:互联网 发布:手机辐射测试软件 编辑:程序博客网 时间:2024/05/16 05:23


一.网络模型:计算机网络是指由通信线路相互连接的许多自主工作的计算机构成的集合体,各部件之间以何种规律进行通信,就是网络模型研究的问题。

分类:网络模型一般指OSI参考模型和TCP/IP参考模型。


二.网络通信协议:为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言。

 

1.三大要素: IP地址(网络中设备的标识);

端口号(用于标识进程的逻辑地址,不同进程的标识,有效端口:0~65535,其中0~1024系统使用或保留端口);

协议(通讯的规则)。

2.两种Java常用的协议:UDPTCP

 

三.UDP

1.特点:把数据打包,对数据有限制(64k以内),面向无链接,不安全,速度快。

2.Java实现方法:在通信的两端通过Socket利用IO通信,客户端需要用到ServerSocket。通信的两端是两个独立的应用程序。

3.基本的类和方法:DatagramSocket   DatagramPacket    da.send(dp);   ds.receive(dp);  dp.getData();

4.例子:


/*需求:通过udp传输方式,将一段文字数据发送出去。,定义一个udp发送端。思路:1,建立updsocket服务。2,提供数据,并将数据封装到数据包中。3,通过socket服务的发送功能,将数据包发出去。4,关闭资源。*/import java.net.*;import java.io.*;class  UdpSend{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){if("886".equals(line)) //利用886来结束键盘输入break;byte[] buf = line.getBytes();DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),11111);ds.send(dp);//将键盘输入发送出去}ds.close();}}

/*需求:定义一个应用程序,用于接收udp协议传输的数据并处理的。定义udp的接收端。思路:1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。方便于明确哪些数据过来该应用程序可以处理。2,定义一个数据包,因为要存储接收到的字节数据。因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。5,关闭资源。*/class  UdpRece{public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket(11111);//接收端需要写端口号//当接收到“886”,结束循环(接受数据)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());  //获取接收到的数据if("886".equals(data)){System.out.println(ip+"....离开聊天室");break;}System.out.println(ip+"::"+data);}}}

四.TCP

1.特点:面向有连接,建立连接通道通过三次握手来传输数据,数据无限制,安全,速度慢。

2.Java实现方法:需要在发送端建立DatagramSocket,要在数据包对象中明确目的IP及端口的;在接收端建立DatagramPacket,要指定监听的端口。通信的两端是两个独立的应用程序。

3.基本的类和方法:Socket s = new Socket(端口号);   //发送

ServerSocket ss = new ServerSocket(端口号);  //接收

Socket s = ss.accept();

s.getOutputStream();

s.getInputStream();


4.例子:

/*演示tcp传输。1,tcp分客户端和服务端。2,客户端对应的对象是Socket。服务端对应的对象是ServerSocket。*//*客户端,通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。因为tcp是面向连接的。所以在建立socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。需求:给服务端发送给一个文本数据。步骤:1,创建Socket服务。并指定要连接的主机和端口。*/import java.io.*;import java.net.*;class  TcpClient{public static void main(String[] args) throws Exception {//创建客户端的socket服务。指定目的主机和端口Socket s = new Socket("192.168.1.254",10003);//为了发送数据,应该获取socket流中的输出流。OutputStream out = s.getOutputStream();out.write("tcp ge men lai le ".getBytes());s.close();}}/*需求:定义端点接收数据并打印在控制台上。服务端:1,建立服务端的socket服务。ServerSocket();并监听一个端口。2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。4,关闭服务端。(可选)*/class  TcpServer{public static void main(String[] args) throws Exception{//建立服务端socket服务。并监听一个端口。ServerSocket ss = new ServerSocket(10003);//通过accept方法获取连接过来的客户端对象。while(true){Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip+".....connected");//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));   //**** new String()错过。s.close();//关闭客户端.}//ss.close();}}


/*演示tcp的传输的客户端和服务端的互访。需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。*//*客户端:1,建立socket服务。指定要连接主机和端口。2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。4,关闭客户端资源。*/import java.io.*;import java.net.*;class TcpClient2 {public static void main(String[] args)throws Exception {Socket s = new Socket("192.168.1.254",10004);OutputStream out = s.getOutputStream();out.write("服务端,你好".getBytes());InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));s.close();}}class TcpServer2{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10004);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip+"....connected");InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));OutputStream out = s.getOutputStream();Thread.sleep(10000);out.write("哥们收到,你也好".getBytes());s.close();ss.close();}}

五:URL统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

 

1.Java.net.url

String getFile() 

          获取此 URL 的文件名。 

 String getHost() 

          获取此 URL 的主机名(如果适用)。 

 String getPath() 

          获取此 URL 的路径部分。 

 int getPort() 

          获取此 URL 的端口号。 

 String getProtocol() 

          获取此 URL 的协议名称。 

 String getQuery() 

          获取此 URL 的查询部分。

 

例子:


/*应用程序和 URL 之间的通信链接*/import java.net.*;import java.io.*;class  URLConnectionDemo{public static void main(String[] args) throws Exception{//自定义网址。URL url = new URL("http://192.168.1.254:8080/myweb/demo.html");URLConnection conn = url.openConnection();System.out.println(conn);InputStream in = conn.getInputStream();//获取输入流byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));}}


 


0 0
原创粉丝点击