zoukankan      html  css  js  c++  java
  • Java 网络编程

    一:OSI模型

    Open System Interconnection 开放系统互联

    二:TCP/IP分层模型

    TCP代表传输控制协议:Transfer Control Protocol 允许两个程序之前进行可靠的通讯

    UDP代表用户报文协议:User Datagram Protocol 允许两个程序之前进行不可靠的通讯

    三 客户端 和 服务器

    四:套接字

    定义:Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据

    五:InetAddress类代表IP地址,没有构造器但是有多个方法,查询API文档。

    六:TCP套接字编程

    服务器:

    –1.利用ServerSocket建立对服务端某个端口的监听。

      如:ServerSocket  server = new ServerSocket(8000);

    –2.利用accept方法创建服务端Socket

      如:Socket socket = server.accept()

    –3.利用已建立的socket创建输入输出流

      如:BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()));    

    –4.关闭输入输出流,关闭socket,关闭server

      如:  br.close(); 

      pw.close();

      socket.close();

     1 package inetAddress;
     2 
     3 /**
     4  * 服务器
     5  */
     6 import java.io.BufferedReader;
     7 import java.io.BufferedWriter;
     8 import java.io.InputStreamReader;
     9 import java.io.OutputStreamWriter;
    10 import java.net.ServerSocket;
    11 import java.net.Socket;
    12 
    13 public class ServerTest {
    14 
    15     public static void main(String[] args) throws Exception {
    16         // 1创建ServerSocket对象指定端口号
    17         ServerSocket server = new ServerSocket(30001);
    18         server.setSoTimeout(10000);
    19         // 2等待客户连接 accept 返回类型Socket
    20         Socket socket = server.accept();
    21         // 3从客户端读数据 socket.getInputStream()
    22         BufferedReader reader = new BufferedReader(new InputStreamReader(
    23                 socket.getInputStream()));
    24         char[] ch = new char[100];
    25         int len = reader.read(ch);
    26         System.out.println("从客户端接收到的消息:");
    27         System.out.println(new String(ch, 0, len));
    28         // 3向客户端写数据 socket.getOutputStream()
    29         BufferedWriter write = new BufferedWriter(new OutputStreamWriter(
    30                 socket.getOutputStream()));
    31         write.write("我们已经接收到消息了");
    32         write.flush();
    33         // 4 释放资源
    34         reader.close();
    35         socket.close();
    36         write.close();
    37 
    38     }
    39 
    40 }

    客户端:

    –1.创建客户端Socket向服务器发起连接请求

      如:Socket  socket = new Socket (“127.0.0.1”, 8000);

    –2..利用已建立的socket创建输入输出流

      如:BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream()));    

    –3.关闭输入输出流,关闭socket,关闭server

      如:  br.close(); 

      pw.close();

      socket.close();

     1 package inetAddress;
     2 
     3 /**
     4  * 客户端
     5  */
     6 import java.io.BufferedReader;
     7 import java.io.BufferedWriter;
     8 import java.io.InputStreamReader;
     9 import java.io.OutputStreamWriter;
    10 import java.net.Socket;
    11 
    12 public class Cliebt {
    13 
    14     public static void main(String[] args) throws Exception {
    15         // 1 创建Socket对象 主机 端口
    16         Socket socket = new Socket("127.0.0.1", 30001);
    17         // 2向服务器写入数据 .getOutputStream()
    18         BufferedWriter write = new BufferedWriter(new OutputStreamWriter(
    19                 socket.getOutputStream()));
    20         write.write("你好服务器");
    21         write.flush();
    22         // 2读出数据 .getInputStream()
    23         BufferedReader reader = new BufferedReader(new InputStreamReader(
    24                 socket.getInputStream()));
    25         char[] ch = new char[100];
    26         int len = reader.read(ch);
    27         System.out.println("数据");
    28         System.out.println(new String(ch, 0, len));
    29         // 3 释放资源
    30         reader.close();
    31         write.close();
    32         socket.close();
    33     }
    34 
    35 }

    七:UDP套接字编程

    用户报文协议(UDP)是用于将二进制数据从一台计算机发送到另一台计算的非连接协议。
    数据被称为数据报包,它包含了数据将要发送到的目标服务器和端口号。
    DatagramSocket类的send()和receive()方法都带有一个DatagramPacket参数。
     
     1 package chap18UDP;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 
     7 /**
     8  * 发送
     9  * 
    10  * @author acer
    11  *
    12  */
    13 public class Sender {
    14 
    15     public static void main(String[] args) throws IOException {
    16         // * 1创建DatagramSocket对象
    17         DatagramSocket scoket = new DatagramSocket(3000);
    18         // *2 创建DatagramPacket对象
    19         byte[] buffer = "你好".getBytes();
    20         int port = 30001;
    21         DatagramPacket packet = new DatagramPacket(buffer, buffer.length,
    22                 scoket.getInetAddress().getLocalHost(), port);
    23         // 3 使用send
    24         scoket.send(packet);
    25         System.out.println("正在发送消息");
    26         // 释放资源
    27         scoket.close();
    28 
    29     }
    30 
    31 }
    接收数据报包需要执行如下步骤:
    1. 创建一个足够大的字节数组,用于存储要接收的包的数据。
    2. 使用该字节数组实例化一个DatagramPacket对象。
    3. DatagramSocket被实例化,它被指定该套接字要绑定到的本地主机上的一个端口。
    4. 调用DatagramSocket类的receive()方法,将DatagramPacket对象传入该方法。这将导致执行线程阻塞,直到接收到一个数据报包或者发生了超时
     1 package chap18UDP;
     2 
     3 import java.net.DatagramPacket;
     4 import java.net.DatagramSocket;
     5 
     6 /**
     7  * 接收
     8  * 
     9  * @author acer
    10  *
    11  */
    12 public class Reciver {
    13 
    14     public static void main(String[] args) throws Exception {
    15         // 创建字节数组
    16         byte[] buffer = new byte[1024];
    17         // 2 创建DatagramPacket对象
    18         DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
    19         // 3 创建DatagramSocket对象
    20         DatagramSocket socket = new DatagramSocket(30001);
    21         // 4 使用receive方法
    22         socket.receive(packet);
    23         System.out.println("正在接收从" + packet.getSocketAddress() + "的信息");
    24         System.out.println(new String(packet.getData()));
    25         // 释放资源
    26         socket.close();
    27 
    28     }
    29 
    30 }
    p发送数据报包需要执行如下步骤:
    •1. 创建一个足够大的字节数组,用于存储要发送的包数据,用该数据填充数组。
    •2. 创建一个新的DatagramPacket 对象,用于存储上面的字节数组,以及服务器名和接收者的端口号。
    •3. DatagramSocket被实例化,它被指定套接字要绑定到本地主机的哪个端口。
    •4. DatagramSocket类的send()方法被调用,传入DatagramPacket对象。
     
     
     
     
  • 相关阅读:
    嵌入式(C)笔试题
    经典C语言编程注意点
    深拷贝和浅拷贝(一)
    拷贝构造函数
    树与二叉树的概念
    线性数据结构
    排序算法_冒泡排序
    排序算法_选择排序
    机器学习_支持向量机
    数据库_11_1~10总结回顾+奇怪的NULL
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/4474143.html
Copyright © 2011-2022 走看看