tcp概述
服务端程序需要事先启动,等待客户端的连接。
客户端主动连接服务器。连接成功才能通信服务端不可以自动连接客户端。
客户端: java.net.Socket 类表示。创建Socket 对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
服务端: java.net.SeverSocket 类表示。创建SeverSocket 对象相当于开启一个服务,并等待客户端的连接。
Socket 类
Socket 类: 该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。
构造方法
public Socket(String host, int port) :
如果指定的host是null, 则相当于指定地址为回送地址。
回送地址(127.x.x.x)是本机回送地址(LoopbackAddress),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。
Socket client = new Socket("127 .0.0.1”,666);
public InputStream getInputstream()
如果此Scoket具有相关联的通道,则生成的InputStream也将关闭相关的Socket。
关闭生成的InputStream也将关闭相关的Socke。
public outputStream getoutputstream(): 返回此套接字的输出流。
如果此Scoket具有相关联的通道,则生成的Outputstream的所有操作也关联该通道。
关闭生成的OutputStream也将关闭相关的Socket。
public void close() :关闭此套接字。
-旦一个socket被关闭,它不可再使用。
关闭此socket也将关闭相关的Inputstream和outputstream。
InputStpublic void shutdownoutput(): 禁用此套接字的输出流。
任何先前写出的数据将被发送,随后终止输出流。
ServerSocket类
ServerSocket类:这个类实现了服务器套接字,该对象等待通过网络的请求。
public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时, 就可以将其绑定到个指定的端口号上,参数port就是端口号。
ServerSocket server = new Server Socket (6666);
public Socket acceptO :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会直阻塞直到建 立连接。
TCP通信分析图解
[服务端]启动,创建ServerSocket对象,等待连接。
[客户端]启动,创建Socket对象,请求连接
[服务端]接收连接,调用accept方法,并返回一个socket对象。
[客户端] Socket对象; 获取Outputstream, 向服务端写出数据。
[服务端] Socket对象,获取Inputstream;获取客户端发送的数据。
到此,客户端向服务端发送数据成功。
server
package Demo01Tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes,0,len));
OutputStream os = socket.getOutputStream();
os.write("收到数据,谢谢你".getBytes());
socket.close();
server.close();
}
}
client
package Demo01Tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8888);
OutputStream os = socket.getOutputStream();
os.write("您好,服务器".getBytes());
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes,0,len));
}
}