黑马程序员---java基础之网络编程

------- android培训java培训、期待与您交流! ----------

网络通讯要素
*IP地址
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1  主机名:localhost
*端口号
用于标识进程的逻辑地址,不同的进程标识
有效端口:0~65535,其中0~1024系统使用或保留端口.
*传输协议
通讯的规则
常见协议:TCP,UDP 
UDP:面向无连接
将数据及源和目的封装成数据包中,不需要建立连接
每个数据包的大小限制在64k内
因无连接,是不可靠协议
不需要建立连接,速度快
>>>UDP传输<<<
*DatagramSocket(发送接收套接字)与DatagramPacket(数据报包)
*建立发送端,接收端
*建立数据包.
*调用Socket的发送接收方法
*关闭Socket
发送端与接收端是两个独立的运行程序
TCP:面向连接
建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次握手完成连接,是可靠协议   例如:问张三在不在,张三说在,我回应张三我知道你在了
必须建立连接,效率会稍低
>>>TCP传输<<<
*Socket和ServerSocket
*建立客户端和服务器端.
*建立连接后,通过Socket中的IO流进行数据的传输.
*关闭socket
同样的,客户端与服务器端是两个独立的应用程序


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


定义一个udp发送端。
思路:
1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。

public class UdpSend {
	public static void main(String[] args) throws Exception {
		DatagramSocket ds = new DatagramSocket(10000);//定义一个Socket服务
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));/键盘录入
		String line = null;
		byte[] buf = null;//定义数据包缓冲区
		while((line = br.readLine()) != null){
			if("over".equals(line))
				break;			
			buf = line.getBytes();//键盘录入的信息装入缓冲区
			DatagramPacket dp = new DatagramPacket(buf,buf.length,(InetAddress.getByName("127.0.0.1")),10086);//将缓冲区数组封装入数据包
			ds.send(dp);//发送数据包
		}
	}
}

定义udp的接收端。
思路:
1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
方便于明确哪些数据过来该应用程序可以处理。
2,定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
5,关闭资源。

public class UdpServer {
	public static void main(String[] args)throws Exception {
		DatagramSocket ds = new DatagramSocket(10086);//建立socket服务
		while(true){		
		byte[] buf = new byte[1024*64];
		DatagramPacket dp = new DatagramPacket(buf,buf.length);//将缓冲区数组封装入数据包
			ds.receive(dp);//接受数据并装入数据包
			String ip = dp.getAddress().getHostAddress();//获取数据包中的ip地址
			String data = new String(dp.getData(),0,dp.getLength());//获取数据包中的数据
			System.out.println(ip+"****"+data);//打印数据
		}
	}
}


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

class  TcpClient{
	public static void main(String[] args) throws Exception{
		//创建客户端的socket服务。指定目的主机和端口
		Socket s = new Socket("127.0.0.1",10003);		
		//为了发送数据,应该获取socket流中的输出流。
		OutputStream out = s.getOutputStream();
		out.write("测试数据".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);

		while(true){
			//通过accept方法获取连接过来的客户端对象。
		Socket s = ss.accept();
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+".....连接");
		//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
		InputStream in = s.getInputStream();	//获取网络流	
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		System.out.println(new String(buf,0,len));//打印流中数据
		s.close();//关闭客户端连接.
		}
	}
}
网络架构:
C/S:Client/Server
客户端,服务端。
特点:
1,需要在客户端和服务端都需要按照编写的软件。
2,维护较麻烦。
好处:可以减轻服务端的压力,如网络游戏。

B/S:Browser/Server
浏览器 ,服务端。
1,客户端不用单独编写软件。
因为客户端用的就是浏览器。
2,对于软件升级,只要考虑服务端即可。
弊端:所有的程序都运行在服务端,客户端的浏览器毕竟解析能力较弱。对游戏等。


URL:

代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

常用方法
String getFile() 
          获取此 URL 的文件名。 
 String getHost() 
          获取此 URL 的主机名(如果适用)。 
 String getPath() 
          获取此 URL 的路径部分。 
 int getPort() 
          获取此 URL 的端口号。 
 String getProtocol() 
          获取此 URL 的协议名称。 
 String getQuery() 
          获取此 URL 的查询部分

------- android培训java培训、期待与您交流! ----------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值