0
点赞
收藏
分享

微信扫一扫

java - 网络编程

天蓝Sea 2023-04-09 阅读 46




网络编程




1. 网络基础
2. TCP/IP协议
3. IP地址
4. Socket通信     TCP/UDP


一般网络编程就是像QQ,MSN等这样的软件编程,就是叫网络编程




什么是网络通信协议
  计算机网络中实现通信必须有一些约定即通信协议,对速率,传输代码,


代码结构,传输控制步骤,出错控制等指定标准


网络通信接口
   为了使两个节点之间能进行对话,必须在它们之间建立通信工具(即接


口),使批次之间能进行信息交换,接口包括两个部分:
   






通信协议分层的思想
  由于节点之间联系很复杂,在指定协议时,把复杂成分分解成一些简单的


成分,再将它们符合起来,最常用的复合方式是层次方式,即同层间可以通


信,上一层可以调用下一层 ,而与再下一层不发生关系,各层互补影响,


利于系统的开发和扩展




通信协议的分层规定
  把用户应用程序作为最高层,把物理通信线路作为最底层,将其间的协议


处理分为若干层,规
定每层处理的任务,也规定每层的接口标准








OSI参考模型




应用层
  |
表示层
  |
会话层
  |
传输层
  |
网络层
  |
数据链路层
  |
物理层










TCP/IP参考模型
  
 应用层
    |
 传输层
    |
 网络层
    |
 物理+数据链路层




国际标准是七层


一般开发是四层


















IP协议
  IP(Internet Protocol)协议是网际层的主要协议,支持网间互连的数据


报通信,它提供的主要功能有:
   
  无链接数据报传送


  数据报路由选择和差错控制


IP地址,是全球唯一的
IP分为四段,每一段数值为0-255


因为每个段的值是4个字节,每个字节最大数是255


也就是一个int型,占四个字节












一般我们一个范围用了一个公网IP,然后这范围都是内网IP,所以我们真实


的IP在公网IP


现在我们用的都是ipv4, 每个段占用4个字节,最大值为255
像  int型


目前已经出来了ipv6,每个段占用8个字节,
最大值已经够用了
像 long型




A类网
  范围(1-126)


B类网
  范围(128-191)


C类网
  范围(192-223)


















TCP协议和UDP协议
 
   TCP(transaction control protocol)
   是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节通信的


协议,通过一种面向连接的协议。TCP连接是字节流而非报文流


   UDP(user data protocol)
   UDP向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时


无需建立连接,是一种不可靠的连接




总结:
    TCP连接,是可靠的连接,发送的数据对方肯定会收到,是面向连接的


协议,速度慢
    
    UDP是不可靠的连接,发送的数据对方无论是否在线照发不误,非面向


连接的协议,速度快
可能会发生丢包问题






一般网络编程,就叫Socket编程




两个java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向


链接的一端称为一个socket


socket通常用来实现client-server连接


java.net包中定义的两个类socket和ServerSocket,分别用来实现client和


server端


建立连接时所需的寻址信息为远程计算机的IP地址和端口号(port number





一台机器上最多可以拥有65536个端口号


端口号只能被一个资源占用


1024以下一般系统分配使用,如果我们也需要用端口,一般用1024以上的端









TCP和UDP各自都可以拥有65536个端口
如果TCP分配了一个8888端口,
那么UDP也可以分配一个8888端口




www.google.com/intl/zh_CN/








//服务端
import java.net.*;


public class TCPServer
{
   public static void main(String[] args) throws Exception
   {
        ServerSocket socket = new ServerSocket(6666);
         //接受客户端
         //accept是阻塞式的,如果没有接受到连接,那么它就一直等待
         //不过一般使用接收的时候,都是while循环接收
         while(true){
              Socket so = socket.accept();
         
         //打印试一下
         System.out.println("一个客户端连接上了"); 


          //服务器端接收发送的数据
          DataInputStream dis = new DataInputStream


(so.getInputStream());  
          //readUTF()也是阻塞式的,如果没有数据,就会死等下去
          System.out.println(dis.readUTF());            
          dis.close();
          
          }


    }
}






//客户端
import java.net.*;
public clss TCPClient
{
   public static void main(String[] args) throws Exception
   {
        //申请连接
        Socket socket = new Socket("127.0.0.1",6666);
        
        //现在开始传输我们要说的话
        OutputStream os = socket.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
         dos.writeUTF("hellow server!");
         dos.flush();
         dos.close();
         os.close();






    }
}














Server发送数据到客户端就是 OutputStream
Server接收客户端的数据就是 InputStream


Client端发送数据到服务器端就是 OutputStream
Client端接收服务器端数据就是   InputStream




























UDP编程  
   就是把数据打成一个小包,发送出去








//服务端
public static void main(String args[]) throws Exception
{


byte buf[] = new byte[1024];


DatagramSocket ds = new DatagramSocket(5678);


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


while(true)
{
     ds.receive(dp);
     System.out.println(new String(buf,0,dp.getLength()));     
}


}




//客户端
public static void main(String[] args) throws Exception
{
    byte[] buf = (new String("Hello")).getBytes();
    DatagramPacket so = new DatagramPacket
    (
     buf,buf.length,new InetSocketAddress("127.0.0.1",5678)
     );
     
     DatagramSocket ds = new DatagramSocket(9999);
     ds.send(dp);
     ds.close();    
}














把长整形转换成字节,然后打包发送到服务器,在从服务器解析

//先打包成字节




 long n = 10000l;
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 DataOutputStream dos = new DataOutputStream(baos);


 dos.writeLong(n)
 byte[] buf = baos.toByteArray();




 把包解析成Long
  ByteArrayInputStream bis = new ByteArrayInputStream();
  DataInputStream ds = new DagaInputStream(bis);
  System.out.println(ds.readLong());



































总结:
    1.网络协议分层思想
    2.IP的是唯一的每一个协议可以有相同的端口
    3.TCP的使用
    4.UDP的编写




 

举报

相关推荐

[java]网络编程

java:网络编程

JAVA 网络编程

java网络编程

Java—网络编程

Java网络编程

Java 网络编程

0 条评论