zoukankan      html  css  js  c++  java
  • 网络编程——TCP协议

    1.TCP程序概述

    TCP是一个可靠的协议,面向连接的协议。

    实现TCP程序,需要编写服务器和客户端,Java API为我们提供了java.net包,为实现网络应用程序提供类。

    ServerSocket:此类实现服务器套接字。

    Socket:此类实现客户端套接字(也可以就叫"套接字")。

    Socket是网络驱动层提供给应用程序编程的接口和一种机制。

    2.数据发送过程

    3.数据接收过程

    4.实现服务器端与客户端程序

    服务器端:

    public class ServerSocket extends Object

    此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

    ServerSocket(int port)

            创建绑定到特定端口的服务器套接字。

    void setSoTimeout(int timeout)

            通过指定超时值启用/禁用so_TIMEOUT

                 以毫秒为单位

    InetAddressgetInetAddress()

            返回此服务器套接字的本地地址

    Socket accept()

            侦听并接受到此套接字的连接

    客户端:

    public class Socket extends Object

    此类实现客户端套接字(也可以就叫"套接字")。套接字是两台机器间通信的端点。

    Socket(String host,int port)

            创建一个流套接字并将其连接到指定主机上的指定端口号。

    InputStreamgetInputStream()

            返回此套接字的输入流

    OutputStreamgetOutputStream()

            返回此套接字的输出流

    void setSoTimeout(int timeout)

            启用/禁用带有指定超时值的

        so_TIMEOUT,以毫秒为单位

    package com.vince;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务器端代码
     * @author Administrator
     *
     */
    public class EchoServerDemo {
        
        public static void main(String[] args) {
        try {
            //端口号从1024~65535
            ServerSocket ss=new ServerSocket(8000);
            System.out.println("服务器已启动,正在等待连接...");
            Socket socket=ss.accept();//等待客户端连接,该方法会阻塞 
            InputStream input=socket.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(input));
            String info=br.readLine();
            System.out.println(info);
            OutputStream output=socket.getOutputStream();
            PrintStream ps=new PrintStream(output);
            ps.println("echo:"+info);
            output.close();
            input.close();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        }
    
    }
    package com.vince;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    /**
     * 客户端代码
     * @author Administrator
     *
     */
    public class EchoClientDemo {
    
        
        public static void main(String[] args) {
            //连接服务器
            try {
                Socket socket=new Socket("localhost",8000);
                System.out.println("连接成功!");
                OutputStream out=socket.getOutputStream();
                InputStream in=socket.getInputStream();
                PrintStream ps=new PrintStream(out);
                ps.println("hello");
                BufferedReader br=new BufferedReader(new InputStreamReader(in));
                String info=br.readLine();
                System.out.println(info);
                out.close();
                in.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
    
        }
    
    }
  • 相关阅读:
    setup-nginx
    Sql Server
    第一次找工作
    JGroups 初探
    游戏与彩票
    MINA 网络黏包处理代码
    powershell遍历文件夹设置权限,解决文件无法删除的问题。
    c# 异步任务队列(可选是否使用单线程执行任务,以及自动取消任务)
    c#注册表对象映射
    最小安装centos 7 无GUI静默安装 oracle 12c,打造轻量linux化服务器
  • 原文地址:https://www.cnblogs.com/shenhainixin/p/5177960.html
Copyright © 2011-2022 走看看