网络编程——TCP协议

时间:2022-02-03 03:37:06

1.TCP程序概述

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

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

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

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

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

2.数据发送过程

网络编程——TCP协议

3.数据接收过程

网络编程——TCP协议

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();
} } }