黑马程序员:Java网络编程

来源:互联网 发布:js控制class样式 编辑:程序博客网 时间:2024/06/10 12:57
------- android培训、java培训、期待与您交流! ----------


网络通讯要素:

Ip地址:

网络中的设备标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost

例:
package com.java;import java.net.InetAddress;public class IPDemo {/** * @param args */public static void main(String[] args) throws Exception {// TODO Auto-generated method stub//通过InetAddress 获取主机名 主机地址InetAddress i = InetAddress.getLocalHost();System.out.println(i.toString());System.out.println("name:"+i.getHostName());System.out.println("address:"+i.getHostAddress());InetAddress i1= InetAddress.getByName("www.baidu.com");System.out.println(i1.toString());System.out.println(i1.getHostName());}}



端口号:

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

传输协议:

常见协议:TCP,UDP

TCP和UDP

UDP:

将数据及源封装成数据包中,不需要建立连接。
每个数据包的大小限制在64K内。
因无连接,是不可靠协议。
不需要建立连接,速度快

TCP:

建立连接,形成传输数据的通道。
在连接中进行大数据传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低

Socket

Socket就是为网络服务提供的一种机制。
通信两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。

UDP传输

DatagramSocket与DataGramPacket
建立发送端,接收端
建立数据包
调用Socket的发送接收方法
关闭Socket
发送端与接收端是两个独立的运行程序

UDP发送端:

思路:
1、建立udpsocket服务。
2、提供数据,并将数据封装到数据包中。
3、通过socket服务的发送功能,将数据发送出去。
4,关闭资源。
package com.java;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class UdpSend {/** * @param args */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubDatagramSocket dSocket = new DatagramSocket();//建立udpsocket服务byte[] data = "UDP 发送".getBytes();//提供数据,并封装成数据包DatagramPacket dp= new DatagramPacket(data,data.length,InetAddress.getByName("10.218.180.16"),9999);dSocket.send(dp);//通过socket服务的发送功能,将数据发出。dSocket.close();}}


UDP接收端:

定义UDP接收端:
思路:
1、定义udpsocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序定义一个数字标识。
方便与明确那些数据过来该应用程序可以处理。
2、定义数据包,因为要存储接收到的字节数据,因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3、通过Socket服务的receive方法将接收到的数据存入已定义好的数据包中。
4、通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
5、关闭资源。
package com.java;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UdpRec {/** * @param args */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubDatagramSocket recSocket = new DatagramSocket(9999);byte[] buf= new byte[1024];DatagramPacket dp= new DatagramPacket(buf,buf.length);recSocket.receive(dp);String  ip= dp.getAddress().getHostAddress();String dataString  =  new String(dp.getData(),0,dp.getLength());int port = dp.getPort();System.out.println(ip+":"+dataString+":"+port);recSocket.close();}}



TCP传输:

1、建立客户端和服务器
2、建立连接后,通过socket中的IO流进行数据传输
3、关闭socket
客户端与服务器是两个独立的应用程序

TCP发送端:

通过查阅socket对象,发现在该对象建立时,就可以连接指定主机。
因为tcp是面向连接的,所以在建立socket服务时,就要有服务端的存在,并连接成功。形成通路后,在该通道进行数据传输。

步骤:
1、创建Socket服务,并指定要连接的主机和端口。
2、为了发送数据,应该获取socket流中的输出流。
3、关闭socket。

package com.java;import java.io.OutputStream;import java.net.Socket;public class TcpSend {/** *通过查阅socket对象,发现在该对象创建时,就可以去连接指定的主机 *因为tcp是面向连接的,所以在建立socket对象时,就要有服务端的存在 *并连接成功,形成通路后,在该通路进行数据的传输。 * *步骤: *1,创建socket服务,并指定连接的主机和端口。 * */public static void main(String[] args) throws Exception {Socket s = new Socket("10.218.180.16",10001);//指定目标主机和端口OutputStream outputStream  = s.getOutputStream();outputStream.write("tcphahhahahh".getBytes());s.close();}}

TCP接收端:

1、建立服务端socket服务。ServerSocket();
并监听一个端口。
2、获取连接过来的客户端对象。
通过ServerSocket的accept方法。没有连接就会等,所以这个方法是阻塞式的。
3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端的读取来来获取该客户端发过来的数据。并打印到控制台上。
4、关闭服务端。
 
package com.java;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class TcpRec {/** * @param args *//* * 1、建立服务器的socket服务,serverSocket(); * 并监听一个端口 * 2、获取连接过来的客户端对象 * 通过serverSocket的accept方法,没有连接就等,所以这个方法是阻塞的。 * 3、客户端如果发过来数据,那么服务器要使用对应的客户端对象,并获取到该客户端的对象的读取流来读取发过来的数据 * 并打印到控制台 * 4、关闭服务器。(可选操作) */public static void main(String[] args) throws Exception {// TODO Auto-generated method stub//建立服务器的socket服务,serverSocket();ServerSocket ssServerSocket = new ServerSocket(10001);Socket socket = ssServerSocket.accept();String ip = socket.getInetAddress().getHostAddress();System.out.println(ip);InputStream inputStream = socket.getInputStream();byte[] buf = new byte[1024];int len = inputStream.read(buf);System.out.println(new String(buf,0,len));ssServerSocket.close();}}





0 0
原创粉丝点击