功能:客户端发送一句话到服务器:(TCP)

功能:客户端发送一句话到服务器:(单向通信)(TCP)

客户端:

package com.gao.Project.pro3;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class TestClient {//客户端
    public static void main(String[] args) throws IOException {
        //1.创建套接字:指定服务器的IP和端口号
        Socket s = new Socket("192.168.2.142",8888);
        //对于程序员来说,向外发送数据  感受--->利用输出流
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        //利用这个OutputStream就可以向外发送数据了,但是没有直接发送String 的方法
        //所以我们又在OutputStream外面套了一个处理流DataOutputStream
        dos.writeUTF("你好");
        //3.关闭流  +   关闭网络资源:
        dos.close();
        os.close();
        s.close();

    }
}

服务器:

package com.gao.Project.pro3;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {//服务器

    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)先开服务器,再开启启客户端

(2)先开客户端,就会出错

功能:服务器端接收完客户端发来的数据,再向客户端输出一句话:(双向通信)(TCP)

服务器:

package com.gao.Project.pro3;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {//服务器

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

        //向客户端输出一句话:---->操作流---->输出流
        OutputStream os = s.getOutputStream();
        DataOutputStream dos =new DataOutputStream(os);
        dos.writeUTF("你好,我是服务器端,我接收到你的请求了");

        //5.关闭流+关闭网络资源:
        dis.close();
        is.close();
        s.close();
        ss.close();
    }
}

客户端:

package com.gao.Project.pro3;

import java.io.*;
import java.net.Socket;

public class TestClient {//客户端
    public static void main(String[] args) throws IOException {
        //1.创建套接字:指定服务器的IP和端口号
        Socket s = new Socket("192.168.2.142",8888);
        //对于程序员来说,向外发送数据  感受--->利用输出流
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        //利用这个OutputStream就可以向外发送数据了,但是没有直接发送String 的方法
        //所以我们又在OutputStream外面套了一个处理流DataOutputStream
        dos.writeUTF("你好");

        //接收服务器端的回话--->利用输入流:
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        String str = dis.readUTF();
        System.out.println("服务器对我说"+str);
        //3.关闭流  +   关闭网络资源:
        dis.close();
        is.close();
        dos.close();
        os.close();
        s.close();

    }
}

posted @ 2022-09-20 21:21  进步+吃饭  阅读(55)  评论(0)    收藏  举报