• Socket编程


    IP地址和端口号的组合得到一个网络套接字。

     
    通信的两端都要有Socket,是两台机器间通信的端点
    网络通信就是Socket间的通信,Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
    基于Socket的TCP编程:
    Java语言的基于套接字编程分为服务端编程和客户端编程,其通信模型如图所示:
     
     
    Socket类的常用方法:
     
    ServerSocket类的常用方法:
     
    基于Socket的TCP编程:
    客户端Socket的工作过程包含以下四个基本的步骤:
    1. 创建 Socket:根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。 
    2. 打开连接到 Socket 的输入/出流: 使用 getInputStream()方法获得输入流,使用 getOutputStream()方法获得输出流,进行数据传输
    3. 按照一定的协议对 Socket  进行读/写操作:通过输入流读取服务器放入线路的信息(但不能读取自己放入线路的信息),通过输出流将信息写入线程。 
    4. 关闭 Socket:断开客户端到服务器的连接,释放线路  
     
    服务器程序的工作过程包含以下四个基本的步骤:
    1.  调用 ServerSocket(int port) :创建一个服务器端套接字,并绑定到指定端口上。用于监听客户端的请求。
    2.  调用 accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象。 
    3.  调用 该Socket类对象的 getOutputStream() 和 getInputStream ():获取输出流和输入流,开始网络数据的发送和接收。
    4.  关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字。 
     
    ServerSocket 对象负责等待客户端请求建立套接字连接,所谓“接收”客户的套接字请求,就是accept()方法会返回一个 Socket 对象:
    ServerSocket ss = new ServerSocket(9999); 
    Socket s = ss.accept (); 
    InputStream in = s.getInputStream(); 
    byte[] buf = new byte[1024];
     int num = in.read(buf); 
    String str = new String(buf,0,num); 
    System.out.println(s.getInetAddress().toString()+”:”+str); 
    s.close(); 
    ss.close();
    UDP网络通信:
    类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。
    流  程: 
    1. DatagramSocket与DatagramPacket
    2.  建立发送端,接收端 
    3.  建立数据包 
    4.  调用Socket的发送、接收方法 
    4.  关闭Socket 
    发送端与接收端是两个独立的运行程序 
     发送端:
         DatagramSocket ds = new DatagramSocket(); 
         byte[] by = “hello,atguigu.com”.getBytes(); 
         DatagramPacket dp = new DatagramPacket(by,0,by.length, InetAddress.getByName(“127.0.0.1”),10000); 
         ds.send(dp); 
         ds.close();
     接收端 :在接收端,要指定监听的端口。
         DatagramSocket ds = new DatagramSocket(10000);
         byte[] by = new byte[1024]; 
         DatagramPacket dp = new DatagramPacket(by,by.length); 
         ds.receive(dp); 
         String str = new String(dp.getData(),0,dp.getLength()); 
         System.out.println(str+"--"+dp.getAddress()); 
         ds.close(); 
     
    Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 
    Server端程序:
    package test;
    import java.net.*;
    import java.io.*; 
    public class Server
    {
     private ServerSocket ss;
     private Socket socket;
     private BufferedReader in;
     private PrintWriter out;
     public Server()
     {
      try
      {
       ss=new ServerSocket(10000);
       while(true)
       {
        socket = ss.accept();
        String RemoteIP = socket.getInetAddress().getHostAddress();
        String RemotePort = ":"+socket.getLocalPort();
        System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
        in = new BufferedReader(new 
    InputStreamReader(socket.getInputStream()));
        String line = in.readLine();
        System.out.println("Cleint send is :" + line);
        out = new PrintWriter(socket.getOutputStream(),true);
        out.println("Your Message Received!");
        out.close();
        in.close();
        socket.close();
       }
      }catch (IOException e)
      {
       out.println("wrong");
      }
     }
     public static void main(String[] args)
     {
      new Server();
     }
    };
    Client端程序:
    package test;
    import java.io.*;
    import java.net.*; 
    public class Client
    {
     Socket socket;
     BufferedReader in;
     PrintWriter out;
     public Client()
     {
      try
      {
       System.out.println("Try to Connect to 127.0.0.1:10000");
       socket = new Socket("127.0.0.1",10000);
       System.out.println("The Server Connected!");
       System.out.println("Please enter some Character:");
       BufferedReader line = new BufferedReader(new 
    InputStreamReader(System.in));
       out = new PrintWriter(socket.getOutputStream(),true);
       out.println(line.readLine());
       in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
       System.out.println(in.readLine());
       out.close();
       in.close();
       socket.close();
      }catch(IOException e)
      {
       out.println("Wrong");
      }
     }
     public static void main(String[] args)
     {
      new Client();
     }
    }; 
     
     
  • 相关阅读:
    iOS删除Scene
    IOS如何解决强引用中的循环引用
    IOS中performSelector线程使用
    IOS中的类方法和实例方法
    Mac系统上安装Java的JDK并配置环境变量
    Java开发基本环境知识
    SVN上传工具Cornerstone的简单使用
    05--学习PHP面向对象--静态成员与常量成员
    04--学习PHP面向对象--访问权限修饰符
    03--学习PHP面向对象--$this
  • 原文地址:https://www.cnblogs.com/xujiming/p/5778367.html
Copyright © 2020-2023  润新知