• 谈一谈socket与java


    用java中socket实现socket聊天

    1,      什么是socket

    Socket 是指网络套接字,什么是套接字呢?    这是网络上一种端对端的网络协议,端口就是进程号,socket在网络中让这两个端通信形成端口直接通信,所以socket的参数可想而知就是两端ip和端口号了;

    再说在网络中,总要有人付出,要在网络中等着别人链接,不然的话你一点想连别人,别人在两点想连你,怎么也不可能连上,总有哟个人需要做等待的角色,这个角色就是服务端也就是serverSocket,他在网络中提供一个固定的ip和端口号套接字;

    2,      在Java中实现socket接口

    在Java中提供了两个用来建立socket链接都在java.net包中,在客户端要用Socket(addr,port)//参数是远程服务的地址和端口号;另一个在服务端中用ServerSocket(port) 建立一个等待的socket端,同时使用serversocket.accept() 在服务端动态等待并接受一个前来请求链接的socket请求

    一旦serversocket.accept()方法获得一个链接,就会封装出一个Socket对象服务端可用这个对象,获得客户端的信息并向客户端发送信息;话不多说,上代码;

      

    package testpackage;
    /*
     * @author:mayeye
     * @about:服务端
     * */
    import java.net.*;
    import java.io.*;
    
    public class TestServer {
        public static void main(String[] args) {
            //try {
                System.out.println("=============================");
                ServerSocket server=null;
                try {
                    server=new ServerSocket(1233);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Socket client = null;
                try {
                    client = server.accept();
                    System.out.println("ip为:"+client.getInetAddress()+"的客户端链接了");
                    System.out.println("port为:"+client.getPort()+"的客户端链接了");
                    System.out.println("Localport为:"+client.getLocalPort()+"的客户端链接了");
    
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                String line = null;
                BufferedReader is = null;
                try {
                    is = new BufferedReader(new InputStreamReader(client.getInputStream()));
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                PrintWriter os = null;
                try {
                    os = new PrintWriter(client.getOutputStream());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
                try {
                    System.out.println("Client:"+is.readLine());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    line=sin.readLine();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                while(!line.equals("bye")){
                    os.println(line);
                    os.flush();
                    System.out.println("Server:"+line);    
                    try {
                        System.out.println("Client:"+is.readLine());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    try {
                        line=sin.readLine();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                os.close();
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    client.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    server.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("********************************");
            /*}catch(Exception e) {
                System.out.println("-------------------------------");
            }*/
        }
    }

    上面是服务端代码

    package testpackage;
    import java.net.*;
    import java.io.*;
    public class testsocket {
        public static void main(String[] args) {
            try {
                Socket client=new Socket("127.0.0.1",1233);
                BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//构建一个标准输入流
                PrintWriter os=new PrintWriter(client.getOutputStream());
                BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));//由client对象构造一个输入流
                String readline;
                System.out.println("ip为:"+client.getInetAddress()+"的客户端链接了");
                readline=sin.readLine();
                while(!readline.equals("bye")) {
                    os.println(readline);
                    os.flush();
                    System.out.println("Client:"+readline);
                    System.out.println("---*****************---");
                    System.out.println("Server:"+is.readLine()); 
                    readline=sin.readLine(); //从系统标准输入读入一字符串s
                }
                os.close();
                is.close();
                client.close();
    
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                System.out.print("====================找不到主机名");
            } catch (IOException e) {
                System.out.print("===================IO错误");
            }
            
        }
    }

    上面是服务端代码;

    大家都是成年人,所以目录结构就不用我说了吧

    这只是用java实现了一个最简易的socket聊天,必须一问一答,而且没有界面;

    预告一下,下一篇博客我将接介绍界面的解决方案;

  • 相关阅读:
    菜吉の骗分导论
    P3527 [POI2011]MET-Meteors 整体二分
    整体二分
    P5459 [BJOI2016]回转寿司 cdq分治
    P3810 【模板】三维偏序(陌上花开) cdq分治
    cdq分治:从归并到cdq套cdq
    KDtree 详解
    查看.a和so文件接口
    机器学习 ONNX Model Zoo
    剖析依赖属性
  • 原文地址:https://www.cnblogs.com/mayeye/p/9571740.html
Copyright © 2020-2023  润新知