基于TCP的网络编程
功能:模拟网站的登录,客户端录入账号密码,然后服务端进行验证。
功能分解1:单项通讯
功能:客户端发送一句话到服务器:
【1】客户端
package com.msb.test02; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; /** * @author : liu * 日期:14:38:40 * 描述:IntelliJ IDEA * 版本:1.0 */ public class TestClient { //这是一个main方法:是程序的入口 public static void main(String[] args) throws IOException { //1.创建套接字:指定服务器的ip和端口号 Socket s=new Socket("192.168.3.2",8888); //2.对于程序员来说,向外发送数据 感受==》利用输出流 OutputStream os=s.getOutputStream(); DataOutputStream ds=new DataOutputStream(os); //利用这个OutputStream就可以向外发送数据了,但是没有直接发送String的方法 //所以我们又在OutputStream外面套了一层处理流DataOutputStream ds.writeUTF("你好"); //3.关闭流+网络资源 ds.close(); os.close(); s.close(); } }
【2】服务端
package com.msb.test02; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /** * @author : liu * 日期:14:54:43 * 描述:IntelliJ IDEA * 版本:1.0 */ public class TestServer { //这是一个main方法:是程序的入口 public static void main(String[] args) throws IOException { //1.创建套接字:指定服务器端口号 ServerSocket ss=new ServerSocket(8888); //2.等待客户端发来的信息 Socket s = ss.accept();//阻塞方法:等待接收客户端的数据,什么时候接收到数据,什么时候程序继续向下执行 //accept()返回值为一个Socket,这个Socket其实就是客户端的Socket //接到这个Socket以后,客户端和服务器才能真正产生了连接,才真正可以通信了 //3.感受到的操作流: InputStream is = s.getInputStream(); DataInputStream dis=new DataInputStream(is); //4.读取客户端发来的数据: String str=dis.readUTF(); System.out.println("客户端发来的数据为:"+str); //5.关闭流+关闭网络资源 dis.close(); is.close(); s.close(); ss.close(); } }
测试:
(1)先开启客户端还是先开启服务器:
浙公网安备 33010602011771号