Java之Socket客户端间通信(JFrame版)

窗体版本的聊天室

思路与“dos版”相似,此版本是通过Runnable接口完成。
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:

  • 避免点继承的局限,一个类可以继承多个接口
  • 适合于资源的共享
    一、首先创建一个JFrame类
    实现窗体输入输出流
package com.xiaogao1;
/*
 * Frame类
 */
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class FrameFather {

		JFrame jf=new JFrame();
		JTextArea jta=new JTextArea(10, 15);
		JScrollPane jsp=new JScrollPane(jta);
		JTextField jtf=new JTextField(20);
		JButton jb=new JButton("Send");
		public FrameFather()
		{
			jf.setVisible(true);
			jf.setBounds(100, 100, 300, 300);
			jf.setLayout(new FlowLayout());
			jta.setLineWrap(true); //设置会换行。
			jf.add(jsp);
			jf.
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一些关于如何使用Java SocketJFrame中设计客户端与服务端通信的图形化界面的基本指导。 首先,您需要在客户端和服务端分别实现Java Socket。这可以通过创建一个Socket对象并指定IP地址和端口号来完成。例如,以下是一个简单的客户端Socket实现: ```java Socket clientSocket = new Socket("localhost", 1234); ``` 接下来,在JFrame中创建一个文本框和一个按钮以便用户可以输入消息并将其发送到服务端。您还需要在JFrame中添加一个显示文本的文本区域,以显示从服务端返回的消息。在用户单击“发送”按钮时,客户端应该将消息发送到服务端。 以下是一个简单的客户端JFrame实现: ```java import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class ClientGUI extends JFrame { private final JTextArea messageArea; private final JTextField textField; private final JButton sendButton; private final Socket clientSocket; private final PrintWriter out; public ClientGUI() throws IOException { super("Chat Client"); // create socket clientSocket = new Socket("localhost", 1234); out = new PrintWriter(clientSocket.getOutputStream(), true); // create UI elements messageArea = new JTextArea(10, 30); messageArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(messageArea); textField = new JTextField(30); sendButton = new JButton("Send"); // add action listener to send button sendButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String message = textField.getText(); out.println(message); textField.setText(""); } }); // add UI elements to frame JPanel panel = new JPanel(); panel.add(textField); panel.add(sendButton); add(panel, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); // set frame properties setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main(String[] args) { try { new ClientGUI(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在服务端实现中,您需要创建一个ServerSocket并在一个无限循环中等待客户端连接。当客户端连接到服务端时,服务端应该创建一个新的线程来处理客户端的请求。在新线程中,服务端应该接收来自客户端的消息,并将其回显回客户端。 以下是一个简单的服务端实现: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(1234); while (true) { Socket clientSocket = serverSocket.accept(); new Thread(new ClientHandler(clientSocket)).start(); } } private static class ClientHandler implements Runnable { private final Socket clientSocket; public ClientHandler(Socket clientSocket) { this.clientSocket = clientSocket; } @Override public void run() { try { BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); String message; while ((message = in.readLine()) != null) { System.out.println("Received message: " + message); clientSocket.getOutputStream().write(message.getBytes()); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 希望这些指导对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值