Java网络编程(一)

1.网络参考模型:
(1)OSI(开放系统互联)参考模型:
应用层:终端应用
表示层:比计算机识别的东西转换成人能识别的东西(解释,加密,解密)
会话层:在系统之间发起会话或接受会话请求。即:通过传输层建立数据连接通路
传输层:定义传输数据的协议和端口号
网络层:将从下层收到的数据进行IP地址的封装与解封装
数据链路层:将从下层收到的数据进行Mac地址的封装与解封装
物理层:定义物理设备标准
(2)TCP/IP参考模型:
应用层:
传输层:
网络层:
主机至网络层:
2.网络通讯的要素:
(1)IP地址:网络中设备的标识,本地回环地址:127.0.0.1。
(2)端口号:用于标志晋城的逻辑地址,不同进程间的标志。有效的端口号:0~65535。其中0~1024系统使用或保留端口。
(3)传输协议:通讯的规则。常见的协议:TCP,UDP。
3.传输协议:
(1)UDP:
将数据及源和目的封装到数据包中,不需要建立连接
每个数据包的大小限制在64K以内
因为无连接,所以是不可靠的协议
不需要建立连接,速度快。
(2)TCP:
建立连接,形成传输数据的通道
在连接中进行大数据量的传输
通过三次握手完成连接,是可靠的协议
必须建立连接,效率略低
4.Socket:
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。

实例代码:

1.获取IP及域名:

import java.net.*;
public class IPDemo 
{
	public static void main(String[] args) throws Exception
	{
		InetAddress ia = InetAddress.getLocalHost();  //1
		System.out.println(ia.getHostAddress());
		System.out.println(ia.getHostName());
		ia = InetAddress.getByName("www.baidu.com");  //2
		System.out.println(ia.getHostAddress());
		System.out.println(ia.getHostName());
	}
}
/*
结果:
	---------- java ----------
	192.168.42.13
	GaoleiFu-PC
	61.135.169.125
	www.baidu.com
	Output completed (0 sec consumed) - Normal Termination
*/
2.简单的聊天程序:

(1)发送端:UDPSend.java

import java.net.*;
import java.io.*;
public class UDPSend 
{
	public static void main(String[] args) throws Exception
	{
		System.out.println("发送端运行了");
		DatagramSocket ds = new DatagramSocket();

		BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		while((line = buff.readLine())!= null){
			byte[] buf = line.getBytes();
			DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.45.1"),10000);	
			ds.send(dp);
			if("over".equals(line)){
				System.out.println(InetAddress.getLocalHost().getHostAddress()+"离开聊天室");
				break;
			}
		}
		ds.close();
	}
}
/*
结果:
	---------- java ----------
	发送端运行了

	Output completed (0 sec consumed) - Normal Termination
*/

(2).接收端:UDPReceive.java

import java.net.*;
public class UDPReceive 
{
	public static void main(String[] args) throws Exception
	{
		System.out.println("接收端运行了");
		DatagramSocket ds = new DatagramSocket(10000);
		byte[]buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf,buf.length);
		while(true){
			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);
			if(text.equals("over"))break;
		}
		ds.close();
	}
}

/*
结果:
	---------- java ----------
<span style="white-space:pre">	</span>接收端运行了
<span style="white-space:pre">	</span>192.168.45.1:49522:haha
<span style="white-space:pre">	</span>192.168.45.1:49522:我是客户端!
<span style="white-space:pre">	</span>192.168.45.1:49522:结束吧!
<span style="white-space:pre">	</span>192.168.45.1:49522:over
<span style="white-space:pre">	</span>Output completed (1 min 35 sec consumed) - Normal Termination
*/




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值