1、TCP程序概述
TCP是一个可靠的协议,面向连接的协议。
实现TCP程序,需要编写服务器端和客户端,Java API为我们提供了java.net 包,为实现网络应用程序提供类。
ServerSocket :此类实现服务器套接字。
Socket :此类实现客户端套接字(也可以就叫“套接字”)。
Socket是网络驱动层提供给应用程序编程的接口和一种机制
4、实现服务器端与客户端程序
服务器端:
public class ServerSocket extends Object
此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者
返回结果。
ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
void setSoTimeout(int timeout)
通过指定超时值启用/禁用 SO_TIMEOUT,以毫秒为单位。
InetAddress getInetAddress()
返回此服务器套接字的本地地址。
Socket accept()
侦听并接受到此套接字的连接。
import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class EchoServerDemo { public static void main(String[] args) { //创建一个服务器端的Socket(1024-65535) try { ServerSocket server = new ServerSocket(6666); System.out.println("服务器创建成功,正在等待客户端连接······"); //等待客户端的连接,如果客户端连接成功,立即返回一个socket对象 Socket socket=server.accept(); //getInetAddress当前地址 System.out.println("客户端连接成功·····"+server.getInetAddress().getHostAddress()); BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //通过输入流读取数据,如果没有数据那么会阻塞 String info=br.readLine(); System.out.println(info); //获取输入流,向客户端返回信息 PrintStream ps=new PrintStream(new BufferedOutputStream(socket.getOutputStream())); ps.println("echo:"+info); ps.flush(); //关闭 ps.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } }
客户端:
public class Socket extends Object
此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
InputStream getInputStream()
返回此套接字的输入流。
OutputStream getOutputStream()
返回此套接字的输出流。
void setSoTimeout(int timeout)
启用/禁用带有指定超时值的
SO_TIMEOUT,以毫秒为单位。
import java.io.*; import java.net.Socket; public class EchoClientDemo { public static void main(String[] args) { //创建一个socket对象,指定要连接的服务器 try { Socket socket=new Socket("localhost",6666); //获取socket的输入输出流 PrintStream ps=new PrintStream(new BufferedOutputStream(socket.getOutputStream())); BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); ps.println("hello my name is bin"); ps.flush(); //读取服务器端返回的数据 String info = br.readLine(); System.out.println(info); ps.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } }
服务器创建成功,正在等待客户端连接······
客户端连接成功·····0.0.0.0
hello my name is bin
echo:hello my name is bin