原实验地址:https://blog.csdn.net/qq_29711355/article/details/125285590
题目
编写网络客户/服务器程序,实现如下功能:
(1)设计服务器程序,运行时等待客户端连接;
(2)客户端设计如下界面,并在启动时与服务器建立连接;
(3)客户端发送消息,服务器收到消息后,将所有小写字符转换为大写字
符,发回给客户端;
(4)客户端收到服务器发回的消息后,在界面上显示。
示例
参考代码
Client 类
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Client extends JFrame {
private JTextArea jTextArea;
private JTextField jTextField;
private JButton jButton;
private ServerSocket serverSocket;
private Socket socket;
private OutputStream out;
private InputStream in;
private BufferedReader bfr;
private BufferedWriter bfw;
public Client() throws HeadlessException {
init();
connection();
closeSteam();
}
private void closeSteam() {
try {
out.close();
in.close();
bfr.close();
bfw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void connection() {
try {
socket = new Socket("127.1.1.1",8080);
out = socket.getOutputStream();
bfw = new BufferedWriter(new OutputStreamWriter(out));
in = socket.getInputStream();
bfr = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = bfr.readLine()) != null){
jTextArea.append("服务端:" + line + System.lineSeparator());
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void init() {
setTitle("客户端");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
setSize(400,300);
jTextArea = new JTextArea();
jTextField =new JTextField(20);
jTextField.setPreferredSize(new Dimension(200,30));
jButton = new JButton("发送");
JPanel jPanel = new JPanel();
jPanel.add(new JLabel("输入消息:"));
jPanel.add(jTextField);
jPanel.add(jButton);
JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jScrollPane.setViewportView(jTextArea);
add(jPanel, BorderLayout.NORTH);
add(new JLabel("服务器响应:"), BorderLayout.WEST);
add(jScrollPane, BorderLayout.CENTER);
setVisible(true);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = jTextField.getText();
if (!"".equals(text)){
try {
bfw.write(text);
bfw.newLine();
bfw.flush();
jTextArea.append("客户端:" + text + System.lineSeparator());
jTextField.setText("");
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
});
}
public static void main(String[] args) {
new Client();
}
}
ServerToUpper 类
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Locale;
public class ServerToUpper {
private ServerSocket serverSocket;
private Socket socket;
private OutputStream out;
private InputStream in;
private BufferedWriter bfw;
private BufferedReader bfr;
public ServerToUpper() {
connection();
}
private void connection() {
try {
serverSocket = new ServerSocket(8080);
socket = serverSocket.accept();
out = socket.getOutputStream();
bfw = new BufferedWriter(new OutputStreamWriter(out));
in = socket.getInputStream();
bfr = new BufferedReader(new InputStreamReader(in));
String line = null;
String text = null;
while ((line = bfr.readLine()) != null){
bfw.write(line.toUpperCase(Locale.ROOT) + System.lineSeparator());
text += line + System.lineSeparator();
bfw.flush();
}
// bfw.write(text.);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerToUpper();
}
}
运行结果
仅有一个客户端界面
注意
运行时需要先运行服务端(SeverToUpper),再运行客户端(Client)
说明
个人能力有限,仅供参考,共同学习!