网络通信--TCP

  • 服务器端与客户端的交互
  • 网络连接TCP协议
    • InetAddressapi InetAddress没有构造方法
    • CS方式api ServerSocket
    • CS交互访问
    • 利用线程来实现C-S来交互

服务器端与客户端的交互

网络通信--TCP_第1张图片

①服务器程序创建一个ServerSocket套接字,调用accept()方法等待客户机来连接
②客户端程序创建一个Socket,请求与服务器建立连接
③服务器接收客户机的连接请求,同时创建一个新的Socket与客户建立连接.服务器继续等待新的连接请求.

网络连接(TCP协议)

InetAddress(api InetAddress),没有构造方法

    try {
    //不能直接new一个对象,用getLocalHost()取得对象
        InetAddress address=InetAddress.getLocalHost();
        System.out.println(address.getHostName());
        System.out.println(address.getHostAddress());
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

C–S方式(api ServerSocket)

运行时先运行服务器代码,在运行客户端代码
在eclipse下面窗口可查看两个控制台的信息

//服务器代码
public static void main(String[] args) {
    try {
        System.out.println("服务器运转");
        ServerSocket server=new ServerSocket(8080);
        Socket socket=server.accept();//开启服务,等待连接
        InputStream is=socket.getInputStream();//获得socket输入流
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        String str=br.readLine();
        System.out.println("在等待"+str);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
//客户端代码
public static void main(String[] args) {
    try {

        Socket socket=new Socket("192.168.0.191",8080);
        System.out.println("客户端启动");
        OutputStream os=socket.getOutputStream();
        OutputStreamWriter osw=new OutputStreamWriter(os);
        BufferedWriter bw=new BufferedWriter(osw);
        bw.write("hello\n");
        bw.flush();
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

C–S交互访问

//服务器代码
public static void main(String[] args) {
    try {
        System.out.println("服务器运转");
        ServerSocket server=new ServerSocket(8080);
        Socket socket=server.accept();
        InputStream is=socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);
        OutputStream os=socket.getOutputStream();
        OutputStreamWriter osw=new OutputStreamWriter(os);
        BufferedWriter bw=new BufferedWriter(osw);
        BufferedReader br=new BufferedReader(isr);
        Scanner input=new Scanner(System.in);
        while(true){
        String str=br.readLine();//等待客户端
        System.out.println("在等待"+str);
        String s=input.next();
        bw.write(s+"\n");
        bw.flush();
        String str1=br.readLine();//等待客户端
        System.out.println("在等待"+str1);

        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
//客户端代码
public static void main(String[] args) {
    try {
        Socket socket=new Socket("192.168.0.191",8080);
        InputStream is=socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        OutputStream os=socket.getOutputStream();
        OutputStreamWriter osw=new OutputStreamWriter(os);
        BufferedWriter bw=new BufferedWriter(osw);
        Scanner input=new Scanner(System.in);
        while(true){
            String s=input.next();
            bw.write(s+"\n");
            bw.flush();
            String sr=br.readLine();
            System.out.println("服务端返回"+sr); 
        }
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

利用线程来实现C-S来交互

//*******************读线程*********************
public class MyRead implements Runnable {
    private Socket socket;

    public MyRead(Socket socket) {// 构造器
        this.socket = socket;
    }

    // @Override
    // public void run() {
    // BufferedReader br = null;
    // try {
    // InputStream is = socket.getInputStream();
    // br = new BufferedReader(new InputStreamReader(is));
    // while (true) {
    //
    // String line = br.readLine();
    // System.out.println("说了:"+"\t" + line);
    // } }catch (IOException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }
    //
    // }
    // }

    @Override
    public void run() {
        BufferedReader br = null;
        try {
            InputStream is = socket.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        while (true) {

            try {
                String line = br.readLine();
                System.out.println("说了:" + "\t" + line);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

}
//******************写线程****************
public class MyWrite implements Runnable {
    private Socket socket;

    public MyWrite(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        BufferedWriter bw = null;
        try {
            OutputStream os = socket.getOutputStream();
            bw = new BufferedWriter(new OutputStreamWriter(os));

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Scanner input = new Scanner(System.in);
        while (true) {
            String words = input.next();
            try {
                bw.write(words + "\n");
                bw.flush();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

}
//*****************服务器端****************
public class MyServer {
    public static void main(String[] args) {
        try {
            ServerSocket server= new ServerSocket(8080);
            System.out.println("服务器启动");
            Socket socket=server.accept();//等待客户端连接进入
            System.out.println("有客户端进来");
            MyRead mr=new MyRead(socket);
            MyWrite mw=new MyWrite(socket);
            Thread t = new Thread(mr);
            Thread t1= new Thread(mw);
            t.start();
            t1.start();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
//*******************客户端*******************
public class MyClient {
    public static void main(String[] args) {
        try {
    System.out.println("客户端连接");
 Socket socket = new Socket("192.168.0.191", 8080);
// Thread read = new Thread(new MyRead(socket));
// Thread write = new Thread(new MyWrite(socket));
// read.start();
// write.start();
 MyRead mr=new MyRead(socket);
    MyWrite mw=new MyWrite(socket);
    Thread t = new Thread(mr);
    Thread t1= new Thread(mw);
    t.start();
    t1.start();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(网络)