[Java][网络编程]服务端向客户端发送信息
2023-12-25 00:01:57
/* 前置知识(服务端) 1.首先要常见一个ServerSocket对象 服务端套接字,并且在服务端套接字里面确定需要使用的端口 2.然后要创建一个Socket对象来接收ServerSocket的返回值。通常一个Socket对象对应一个客户端/涉及到多个客户端需要通过线程来解决 3.现在客户端和服务端已经通过socket链接了,然后就需要创建一个InputStream的输入流来获取socket所对应客户端的流入内容 4.然后很关键的一点:需要创建一个ByteArrayOutPutStream这样的 字符数组的输出流来在控制台输出内容 5.创建一个缓冲的字节数组Byte[] 然后给定它的大小 比如1024 6.现在我们进入循环读取客户端传进流的信息的时候了,因此需要调用接收传入流的ips中的read方法 7.然后将读取到的内容放入到Byte[]数组中,然后通过ByteArrayOutputStream的write方法将Byte[]数组输出在控制台 8.因为客户端输入的信息一般都是字符串 因此我们需要把baos这个ByteArrayOutputStream转换成String 9.我们得把创建对象 和把对对象赋值的部分都留在try-with-resources结构里面 这样可以避免手动关闭对象对资源的占用 */
/* 前置知识(客户端): 1.还是先把try-with-resources结构摆出来 2.因为我们是客户端,希望输出内容,我们就得先和服务端链接 3.我们创建一个Socket套接字,先给本地安排一个地址,然后端口得和服务端对上 比如我们是服务端ip为127.0.0.1 端口为8090 我们就得把这个套接字对准8090和127.0.0.1 4.接下来我们依然是要和服务端一样依托io流来完成信息的传递 比如我们依然需要创建一个OutputStream对象,然后让这个对象和Socket发生关联 比如getOutputStream这个方法 5.我们在OutputStream这个对象和Socket产生关联之后 就可以调用OutputStream来调用write方法来输出文字了 6.我们要切记:我们只能在此输入字节类型的文件 因此需要调用getByte(). */
/*
前置知识(客户端):
1.还是先把try-with-resources结构摆出来
2.因为我们是客户端,希望输出内容,我们就得先和服务端链接
3.我们创建一个Socket套接字,先给本地安排一个地址,然后端口得和服务端对上
比如我们是服务端ip为127.0.0.1 端口为8090 我们就得把这个套接字对准8090和127.0.0.1
4.接下来我们依然是要和服务端一样依托io流来完成信息的传递
比如我们依然需要创建一个OutputStream对象,然后让这个对象和Socket发生关联 比如getOutputStream这个方法
5.我们在OutputStream这个对象和Socket产生关联之后 就可以调用OutputStream来调用write方法来输出文字了
6.我们要切记:我们只能在此输入字节类型的文件 因此需要调用getByte().
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) {
String serverHost = "127.0.0.1";
int serverPort = 8888;
try {
// 创建socket连接服务器
Socket socket = new Socket(serverHost, serverPort);
// 获取输入输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
while (true) {
// 从控制台读取用户输入的消息
System.out.print("请输入要发送的消息:");
String message = reader.readLine();
// 发送消息到服务器
writer.println(message);
// 如果输入的消息为"bye",则退出循环
if (message.equals("bye")) {
break;
}
// 从服务器接收消息
BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String serverMessage = serverReader.readLine();
System.out.println("服务器返回的消息: " + serverMessage);
}
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
前置知识(服务端)
1.首先要常见一个ServerSocket对象 服务端套接字,并且在服务端套接字里面确定需要使用的端口
2.然后要创建一个Socket对象来接收ServerSocket的返回值。通常一个Socket对象对应一个客户端/涉及到多个客户端需要通过线程来解决
3.现在客户端和服务端已经通过socket链接了,然后就需要创建一个InputStream的输入流来获取socket所对应客户端的流入内容
4.然后很关键的一点:需要创建一个ByteArrayOutPutStream这样的 字符数组的输出流来在控制台输出内容
5.创建一个缓冲的字节数组Byte[] 然后给定它的大小 比如1024
6.现在我们进入循环读取客户端传进流的信息的时候了,因此需要调用接收传入流的ips中的read方法
7.然后将读取到的内容放入到Byte[]数组中,然后通过ByteArrayOutputStream的write方法将Byte[]数组输出在控制台
8.因为客户端输入的信息一般都是字符串 因此我们需要把baos这个ByteArrayOutputStream转换成String
9.我们得把创建对象 和把对对象赋值的部分都留在try-with-resources结构里面 这样可以避免手动关闭对象对资源的占用
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
int serverPort = 8888;
try {
// 创建ServerSocket监听指定端口
ServerSocket serverSocket = new ServerSocket(serverPort);
System.out.println("等待客户端连接...");
// 等待客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接成功!");
// 获取输入输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);
while (true) {
// 接收客户端发送的消息
String clientMessage = reader.readLine();
// 如果客户端发送的消息为"bye",则退出循环
if (clientMessage.equals("bye")) {
break;
}
System.out.println("接收到的消息: " + clientMessage);
// 发送消息给客户端
writer.println("已接收到消息:" + clientMessage);
}
// 关闭连接
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
文章来源:https://blog.csdn.net/qq_37511412/article/details/135187183
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!