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

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

 

 

网络编程:
如何连接网络中的计算机?
1 找到对方IP
2 数据要发送到对方指定的应用程序上,为了标识这些程序,所以这些网络程序都用
数字标识,这个数字就是端口号
3 定义协议 通信规则,这个通信规则称为协议。国际组织定义了通用协议 TCP/IP

网络模型:
osi参考模型

TCP/IP参考模型


UDP 
面向无连接

将数据及源和目的封装成数据包,不需要建立连接
每个数据包的大小限制在64k内
因为是无连接,所以是不可靠协议,但是速度快

通过UDP传输方式,发送数据思路
1 建立UDPSocket服务
2 提供数据,并把包数据封装成包
3 通过scoket服务的发送功能,将数据包发出去
4 关闭资源

 


public class UdpSend {
 public static void main(String[] args) throws IOException {
  //通过DatagramSocket对象创建udp服务
  DatagramSocket ds = new DatagramSocket();
  //确定要发送的数据
  byte[] buf = "abcdef".getBytes();
  //将要发送的数据封装成包
  DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.100"), 9999);
  //通过创建的udp对象的socket服务的send方法将已有的数据发送出去
  ds.send(dp);
  //关闭服务
  ds.close();
  
 }
}


通过UDP传输方式,接受数据思路

1 定义UDPSocket服务
2 定义一个数据包,因为要存储接受到的字节数据。而数据包对象中有更多的功能
可以提取字节数据中的不同数据信息
3 通过scoket服务的receive方法将收到的数据存入已定义好的数据包中
4 通过数据包的特有功能,将这些不同的数据取出,打印在控制台上
5 关闭资源

public class UdpRece {
 public static void main(String[] args) throws IOException {
  //创建UDP服务
  DatagramSocket ds = new DatagramSocket(9999);
  while(true){
   
   //定义数据包用于储存数据
   byte[]  buf = new byte[3];
   DatagramPacket dp = new DatagramPacket(buf, buf.length);
   //通过receive方法将收到的数据存入数据包
   ds.receive(dp);
   //通过数据包的方法获取其中的数据
   String ip= dp.getAddress().getHostAddress();
   String data =  new String(dp.getData(),0,dp.getLength());
   int port = dp.getPort();
   System.out.println(ip+"--"+data+"--"+port);
  }
  //ds.close();
 }
}


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

 


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


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

3 服务端对应的是ServerSocket。

 


tcp传输步骤:
客户端
1 创建socket服务,并指定要连接的主机和端口
2 通过客户端对象的getOutputStream方法获取输出流
3 通过获取的输出流写入数据
4 关闭socket服务

public class SocketTest {
 public static void main(String[] args) throws IOException {
  //创建客户端Socket对象,并指定主机和端口
  Socket s = new Socket("192.168.1.100",11111);
  //通过客户端对象的getOutputStream方法获取输出流
  OutputStream os = s.getOutputStream();
  //写入数据
  os.write("aaaa".getBytes());
  //关闭客户端对象
  s.close();
  
 }
}

服务端
1 建立服务端的socket服务,ServerSocket()并监听一个端口
2 获取连接过来的客户端对象:通过ServerSocket的accept方法。没有连接就会等
所以这个方法是阻塞式的
3 客户端如果发过来数据,那么服务器端要使用对应的客户端对象,并收取到该客户端
对象的读取流来读取发过来的数据
4 关闭服务器(可选)

public class ServerSocketTest {
 public static void main(String[] args) throws IOException {
  //创建ServerSocket对象,并监听端口
  ServerSocket ss = new ServerSocket(11111);
  //通过accpet方法获取连接过来的客户端对象
  Socket s =ss.accept();
  //通过得到的客户端对象获取输入流
  InputStream in = s.getInputStream();
  //创建数组,存储得到数据
  byte[] buf = new byte[1024];
  //通过输入流对象把数据读取到数组中
  int line=in.read(buf);
  System.out.println(new String(buf,0,line));
  
 }
}

 

使用键盘录入,因为其有阻塞式方法,要注意回车符结束标记。当然也可用printStream 设置参数为true 自动刷新
shutdownOutput()  关闭输出流,相当于给流中加一个结束标记-1

url 类

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

 


域名解析
浏览器发起请求,先去本机找域名解析文件,没有找到再去找公网找dns服务器解析域名,dns服务器解析域名后向浏览器返回相应的
ip地址,浏览器再向得到的ip地址发起请求

 

 

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

详细请查看:http://edu.csdn.net/heima

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值