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