黑马程序员—网络编程

本文详细解析了网络通信要素,包括IP地址、端口号和传输协议(如TCP和UDP)。同时,提供了UDP和TCP传输的实现代码示例,并探讨了TCP传输中最常见的问题及其解决方法。此外,还介绍了URL类的基本用途和常用方法。

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

网络参考模型



网络通讯要素

1,P地址:InetAddress
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1  主机名:localhost
2,端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024系统使用或保留端口。
3,传输协议
通讯的规则
常见协议:TCP,UDP

UDP
1,将数据及源和目的封装成数据包中,不需要建立连接
2,每个数据报的大小在限制在64k内
3,因无连接,是不可靠协议
4,不需要建立连接,速度快
TCP
1,建立连接,形成传输数据的通道。
2,在连接中进行大数据量传输
3,通过三次握手完成连接,是可靠协议
4,必须建立连接,效率会稍低

Socket

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

UDP传输

1,DatagramSocket与DatagramPacket
2,建立发送端,接收端。
3,建立数据包。
4,调用Socket的发送接收方法。
5,关闭Socket。
发送端与接收端是两个独立的运行程序。

发送端:

public static void main(String[] args) throws Exception
{

//1,创建udp服务,通过DategrameSocket对象

DatagramSocket ds = new DatagramSocket();


//2,确定数据,将数据封装成数据包

byte[] buf = "我给你发点数据".getBytes();

DatagramPacket dp =

new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);

//3,通过socket服务,将已有的数据包发送出去

ds.send(dp);

//关闭资源

ds.close();


}

接收端:

public static void main(String[] args) throws Exception
{

//1,创建udpsocket,建立端点

DatagramSocket ds = new DatagramSocket(10000);

//2,定义数据包,用于存储数据

byte[] buf = new byte[1024];

DatagramPacket dp = new DatagramPacket(buf,buf.length);


//3,通过服务的receive方法将收到的数据存入数据包中

ds.receive(dp);


//4,通过数据包的方法获取其中的数据。

String ip = dp.getAddress().getHostAddress();

String data = new String(dp.getData(),0,dp.getLength());

int port = dp.getPort();

System.out.println(ip+"::"+data+"::"+port);

//5,关闭资源

ds.close();

}

TCP传输

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

客户端:

public static void main(String[] args) throws Exception
{

//创建客户端的socket服务,指定目的主机和端口

Socket s = new Socket("192.168.1.100",10003);


//为了发送数据,应该获取socket流中的输出流

OutputStream out = s.getOutputStream();

out.write("Tcp协议 发点数据".getBytes());


//关闭资源

s.close();

}

服务端:

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));

s.close();//关闭客户端

ss.close();//关闭服务端

}

}

Tcp传输最容易出现的问题

1,客户端连接上服务端,两端都在等待,没有任何数据传输。
2,通过例程分析:
因为read方法或者readLine方法是阻塞式。
3,解决办法:
自定义结束标记
使用shutdownInput,shutdownOutput方法。

练习1:建立一个文本转换服务器。

 

练习2:上传图片

 

练习3:限制用户登录次数

 

URL

URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。

资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,

例如对数据库或搜索引擎的查询。

常见方法:

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



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值