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