网络编程——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();
        }
        

    }

}
原文地址:https://www.cnblogs.com/shenhainixin/p/5177960.html