黑马程序员--------java 网络编程
来源:互联网 发布:洗车优惠的软件 编辑:程序博客网 时间:2024/05/16 17:28
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
网络编程
逻辑端口:用于标识进程的逻辑地址,不同进程的标识;有效端口:0-65535,其中0-1024系统使用或为保留端口
Socket(套接字,通信的端点):为网路服务提供一种机制,通信两端都有Socket,网路通信其实就是Socket间的通信,数据在两个Socket间通过IO传输
网络传输协议:UDP 、TCP
UDP:1、将数据源和目的封装成数据包中,不需要建立连接
2、每个数据包的大小限制在64k内
3、因无连接,是不可靠协议
4、不需要建立连接,速度快
TCP : 1、建立连接,形成传输数据的通道
2、在连接中进行大数据量传输
3、通过三次握手完成连接,是可靠协议
4、必须建立连接,效率会稍低
UDP传输:
1、特点:只要是网路传输必须有socket服务;数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息
2、操作方式:
1)直接操作udp不可能,对于java语言应该将udp封装成对象——DatagaramSocket,即封装了udp传输协议的socket对象
2)因为数据包中包含的信息较多,为了操作方便,也一样将其封装成对象——DatagramPacket,通过这个对象的方法,就可以获取到数据包中的各种信息
3)DatagramSocket具备接收可发送功能,在进行udp传输时,需要明确一个是发送端一个是接收端
3、建立UDP发送端步骤:
1、建立udp的socket服务,创建对象时没有明确端口,系统会自动分配一个未使用的端口
2、明确要发送的具体数据,并将数据封装成数据包
3、调用socket服务的send方法将数据包发送出去
4、关闭资源
——————————————————
importjava.net.*;
classUdpSend
{
public static void main(String[] args)throws Exception
{
//创建udp服务
DatagramSocket ds = newDatagramSocket(9999);
//确定数据,并封装成数据包 DatagramPacket(byte[] buf,int length, InetAddress address, int port)
byte[] buf = "UDP wo laila ".getBytes();
DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.103"),10000);
//通过socket服务将已有的数据包发送出去
ds.send(dp);
//关闭资源
ds.close();
}
}
4、建立UDP接收端步骤:
1、创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。
2,定义数据包,用于存储接收到数据。
3,通过socket服务的接收方法将收到的数据存储到数据包中。
4,通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。
5,关闭资源。
——————————————————
classUdpReceive
{
public static void main(String[] args)throws Exception
{
// 1,创建udp的socket服务
DatagramSocket ds = newDatagramSocket(10000);
// 2,定义数据包,用于存储接收到数据。先定义字节数组,数据包会把数据存储到字节数组中
byte[] buf = new byte[1024];
DatagramPacket dp = newDatagramPacket(buf,buf.length);
// 3,通过socket服务的接收方法将收到的数据存储到数据包中
ds.receive(dp);//该方法是阻塞式方法。
// 4,通过数据包的方法获取数据包中的具体数据内容,比如ip,端口,数据等等
String ip =dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = newString(dp.getData(),0,dp.getLength());//将字节数组中的有效部分转成字符串
System.out.println(ip+":"+port+"--"+text);
// 5 关闭资源。
ds.close();
}
}
练习:
TCP传输:
1、特点:两个端点建立连接后会有一个传输数据的通道,这个通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入
2、TCP的两个端点:客户端和服务端
* 客户端:对应的对象——Socket
* 服务端:对应的对象——ServerSocket
3、建立TCP客户端:
1,建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)
2,如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象
3,关闭资源
——————————————————————————
importjava.io.*;
importjava.net.*;
classTcpClient
{
public static void main(String[] args)throwsException
{
Socket s = newSocket("192.168.1.103",10005);//创建socket服务,并指定连接主机和端口号
OutputStream os = s.getOutputStream();//获取socket的输出流,给服务端发送数据
os.write("TCP ge men wo laile".getBytes());
s.close();//关闭客户端
}
}
4、建立TCP服务端:
1、建立服务端的socket服务——ServerSocket,并监听一个端口
2、获取连接过来的客户端对象,通过ServerSocket的accept方法,没有连接就会等待,所以这个方法为阻塞式方法
3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该对象的读取流来读取客户端数据
4、关闭服务端(可选择操作),如要关闭先关客户端,在关服务端
——————————————————————
classTcpServer
{
public static void main(String[] args)throws Exception
{
ServerSocket ss = newServerSocket(10005);//建立服务端,并监听10005端口
Socket s = ss.accept();//通过accept方法获取连接的客户端对象
String ip =s.getInetAddress().getHostAddress();//获取客户端对象的IP
System.out.println(ip+".......connect");
byte[] buf = new byte[1024];//建立一个数组来存储读取的数据
InputStream is = s.getInputStream();//创建一个客户端对象的输入流,来读取客户端数据
int x= is.read(buf);
String file = new String(buf,0,x);//将数组中的数据转换为字符串形式
System.out.println(file);
s.close();
ss.close();//关闭服务端
}
}
练习:
URL
1、类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
- 黑马程序员-java网络编程
- 黑马程序员--java网络编程
- 黑马程序员-java-网络编程
- 黑马程序员 Java网络编程
- 黑马程序员----java网络编程
- 黑马程序员---网络编程【java】
- 黑马程序员 java网络编程
- 黑马程序员:JAVA网络编程
- 黑马程序员 Java网络编程
- 黑马程序员-java 网络编程
- 黑马程序员-------Java网络编程
- 黑马程序员------java网络编程
- 黑马程序员-java网络编程
- 黑马程序员 java 网络编程
- 黑马程序员-Java网络编程
- 【黑马程序员】java网络编程
- 黑马程序员-JAVA网络编程
- 黑马程序员--JAVA网络编程
- Opencv关于滑动条bar操作的实例
- 使用MapReduce来实现PageRank算法
- Photoshop序列图处理工具
- 线性结构(三) - 队列的原理与实现
- OpenCV以及GPU加速
- 黑马程序员--------java 网络编程
- 推荐几个优秀的UI素材网站!做网站不发愁了。
- marguee实现文字的移动
- device_create详解
- C#面向对象第一天总结
- eric pyqt开发
- 黑马程序员--------java 正则表达式
- 在VMWare上安装ubuntu及VMWare Tools(转载)
- Vs2013在Linux开发中的应用(30):程序中断