为了账号安全,请及时绑定邮箱和手机立即绑定

Java Socket应用---通信是这样练成的

难度初级
时长 2小时 0分
学习人数
综合评分9.77
496人评价 查看评价
9.9 内容实用
9.8 简洁易懂
9.6 逻辑清晰
  • socket编程传递文件

    查看全部
    0 采集 收起 来源:Socket 总结

    2018-05-23

  • 使用TCP通信传输对象

    查看全部
    0 采集 收起 来源:Socket 总结

    2018-05-23

  • 直接关闭socket,即流也一起关闭。

    查看全部
    0 采集 收起 来源:Socket 总结

    2018-05-23

  • 多线程通信的优先级问题

    查看全部
    0 采集 收起 来源:Socket 总结

    2018-05-23

  • 客户端实现步骤

    /*UDP客户端*/
    public class UDPClient {
     public static void main(String[] args) {
      try {
       //向服务器端发送数据
       //1.定义服务器的地址、端口号、数据
       InetAddress address = InetAddress.getByName("localhost");
       int port = 8800;
       byte[] data = "用户名:admin;密码:123".getBytes();
       //2.创建数据报,包含发送的数据信息
       DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
       //3.创建DatagramSocket对象
       DatagramSocket socket = new DatagramSocket();
       //4.向服务器端发送数据报
       socket.send(packet);
       
       //接收服务器端响应的数据
       //1.创建数据报,用于接收服务器端响应的数据
       byte[] data2 = new byte[1024];
       DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
       //2.接收服务器响应的数据
       socket.receive(packet2);
       //3.读取数据
       String reply = new String(data2,0,packet2.getLength());
       System.out.println("我是客户端,服务器端说:"+reply);
       //4.关闭资源
       socket.close();
      } catch (UnknownHostException e) {
       e.printStackTrace();
      } catch (SocketException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }


    查看全部
  • 服务器端实现步骤

    /*UDP服务器端,实现基于UDP的用户登陆*/
    public class UDPServer {
     public static void main(String[] args) {
      try {
       //接收客户端发送的数据
       //1.创建服务器端DatagramScoket,指定端口
       DatagramSocket socket = new DatagramSocket(8800);
       //2.创建数据报,用于接收客户端发送的数据
       byte[] data = new byte[1024];//创建字节数组,指定接受的数据报的大小
       DatagramPacket packet = new DatagramPacket(data, data.length);
       //3.接受客户端发送的数据
       System.out.println("服务器端已经启动,等待客户端发送数据");
       socket.receive(packet);//此方法在接收到数据报之前会一直阻塞
       //4.读取数据
       String info = new String(data,0,packet.getLength());
       System.out.println("我是服务器,客户端说:"+info);
       
       //向客户端响应数据
       //1.定义客户端的地址、端口号、数据
       InetAddress address = packet.getAddress();
       int port = packet.getPort();
       byte[] data2 = "欢迎你!".getBytes();
       //2.创建数据报,包含响应的数据信息
       DatagramPacket packet2 = new DatagramPacket(data2, data2.length,address,port);
       //3.响应客户端
       socket.send(packet2);
       //4.关闭资源
       socket.close();
      } catch (SocketException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }
    查看全部
  • UDP编程
      1、UDP协议(用户数据报协议)是无连接、不可靠、无序的。
      2、UDP协议以数据报作为数据传输的载体。
      3、使用UDP进行数据传输时,首先需要将要传输的数据定义成数据报(Datagram),在数据报中指明所要达到的Socket(主机地址和端口号),然后在将数据报发生出去。
      4、相关操作类:DatagramPacket:表示数据报包
                     DatagramSocket:进行端到端通信的类

    DatagramPacket类构造方法:
      1、DatagramPacket(byte[] buf,int length)//接受长度为length的数据包
      2、DatagramPacket(byte[] buf,int length,InetAddress address,int port)//将指定长度的字节发生到指定主机的指定端口

    DatagramSocket类
      1、构造方法:DatagramSocket();
                   DatagramSocket(int port,InetAddress laddr);
      2、close();//关闭DatagramSocket
      3、getInetAddress();//获取地址
      4、getPort();//获取端口号
      5、send(DatagramPacket p);//从此套接字发送数据包
         recrive(DatagramPacket p);//从此套接字接收数据包

    查看全部
    0 采集 收起 来源: DatagramPacket

    2018-05-23

  • UDP编程操作

    查看全部
    0 采集 收起 来源: DatagramPacket

    2018-05-23

  • 主线程负责创建socket
    * 一个线程用来读取
    * 一个线程用来写入,用两个内部类
    * 要用多线程实现,send线程和recived线程同时访问buff数据区。
    * 发送完成后notify,接收线程。接收线程自身wait
    * 接收的说,我先wait一下,可能缓存中还没有数据,我会拿到空值的。
    * 发送的说Ok,我先写,写完了我notifyall你。我就一直锁着。变成并行处理了。
    每个客户端连接服务端都会产生一个新的socket。

    socket关闭条件时

    一种写法:if(socket!=null)socket.close();

    另一种写法:if(!socket.isClosed())socket.close();

    查看全部
  • 多线程服务器操作

    查看全部
  • 服务器向客户端进行响应

    //获取输出流,响应客户端的请求
    OutputStream os=socket.getOutputStream();
    PrintWriter pw=new PrintWriter(os);//包装为打印流
    pw.write("欢迎您!");
    pw.flush();//调用flush()方法刷新缓冲输出
    //关闭资源
    pw.close();
    os.close();
    socket.close();

    --------------------------------
    客户端接收服务器发送的消息

    InputStream is=socket.getInputStream();
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    String line;
    while((line=br.readerline()!=null)
    {
        System.out.println("我是客户端,服务器说:"+line);
    }
    is.close();
    br.close();
    socket.close();
    查看全部
  • /*TCP服务器端*/
    public class Server { 
        public static void main(String[] args) {  
            try {   
                //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口   
                ServerSocket serverSocket = new ServerSocket(8888);   
                //2.调用accept()方法开始监听,等待客户端的连接   
                System.out.println("服务器即将启动,等待客户端的连接");   
                Socket socket = serverSocket.accept();   
                //3.获取输入流,并读取客户端信息   
                InputStream is = socket.getInputStream();//字节输入流   
                InputStreamReader isr = new InputStreamReader(is);//将字节流包装为字符流
                BufferedReader br = new BufferedReader(isr);//为输入流添加缓冲   
                String info = null;   
                while((info=br.readLine())!=null){//循环读取客户端的信息    
                    System.out.println("我是服务器,客户端说:"+info);   
                }   
                socket.shutdownInput();//关闭输入流      
                //4.关闭资源   
                br.close();   
                isr.close();   
                is.close();   
                socket.close();   
                serverSocket.close();  
            } catch (IOException e) {   
                e.printStackTrace();  
            }   
        }
    }
    /*TCP客户端*/
    public class Client { 
        public static void main(String[] args) {  
            try {   
                //1.创建客户端Socket,指定服务器地址和端口   
                Socket socket = new Socket("localhost",8888);   
                //2.获取输出流,向服务器端发送信息   
                OutputStream os = socket.getOutputStream();//字节输出流   
                PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流   
                pw.write("用户名:admin;密码:123");   
                pw.flush();   
                socket.shutdownOutput();//关闭输出流      
                //3.关闭资源   
                pw.close();   
                os.close();   
                socket.close();  
             } catch (UnknownHostException e) {   
                e.printStackTrace();  
             } catch (IOException e) {   
                 e.printStackTrace();  
             } 
        }
    }
    查看全部
  • 服务端:
    1、创建ServerSocket对象,绑定监听端口
    2、通过accept()方法监听客户端请求
    3、连接建立后,通过输入流读取客户端发送的请求信息
    4、通过输出流向客户端发送响应信息
    5、关闭相关资源

    客户端:
    1、创建Socket对象,指明需要连接的服务器的地址和端口号
    2、连接建立后,通过输出流向服务器端发送请求信息
    3、通过输入流获取服务器相应的信息
    4、关闭相关资源。

    查看全部
  • 客户端的操作

    查看全部
  • 服务器端的操作

    查看全部

举报

0/150
提交
取消
课程须知
本课程是 Java 开发课程的高级课程,需要对 Java 中的面向对象、IO、多线程,以及网络相关知识有一定的基础
老师告诉你能学到什么?
1、网络相关的基础知识 2、Java 中网络相关 API 的应用 3、实现基于 TCP 的 Socket 编程 4、实现基于 UDP 的 Socket 编程

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!