演示TCP传输
1.Tcp分客户端和服务端
2.客服端对应的对象是scoket
服务端对应的对象是serverscoket
客户端:
通过查阅scoket对象,发现在建立对象时,就可以连接指定的主机。
因为tcp是面向连接的,所以在建立scoket服务时,就要有服务端存在,并连接成功,形成通路后,在该通道进行数据的传输。
需求:给服务端发送一个文本数据
步骤:
1.创建Socket服务并指定要连接的主机和端口。可以采用构造方法Socket(String host, int port)或对象方法connect(SocketAddress endpoint)
2.获取Sockett中的输出流,用来发送数据。方法是OutputStream getOutputStream()
3.关闭客户端流。
//例子如下:
import java.net.*; import java.io.*; class TcpClient { public static void main(String[] args)throws Exception { //创建客户端的Socket服务,指定目的主机和端口 Socket s = new Socket("192.168.1.105",8888); //为了发送数据,应该获取Socket中的输出流, OutputStream out = s.getOutputStream(); out.write("tcp is coming!".getBytes()); //关闭客户端流 s.close(); } }
需求:定义端点接收数据,并打印在控制台上。
服务端:
1.建立服务端的Socket服务,构造函数ServerScoket(int port),并监听一个端口
2.获取连接过来的客服端对象,方法Socket accept() ,这个方法是阻塞式的,没有连接就等。
3.如果客服端发送过来数据,那么服务端要使用对应的客服端对象,并采用该客服端的读取流对象来读取发过来的数据。并打印在控制台。
4.关闭服务端(可选操作)
//例子如下:
class TcpServer { public static void main(String[] args)throws Exception { //建立服务端的Socket服务,并监听一个端口 ServerSocket ss = new ServerSocket(8888); //通过accept方法获取连接过来的客服端对象 Socket s = ss.accept(); String IP = s.getInetAddress().getHostAddress(); System.out.println(IP+"...connected!"); //获取客户端发送给来的数据,服务端要使用客服端对象的读取流类读取数据。方法InputStream getInputStream() InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close();//关闭客户端 ss.close();//关闭服务端(可选操作) } }