import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import static java.lang.System.out;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyTcp extends JFrame{
private BufferedReader reader;
private PrintWriter writer;
private ServerSocket server;
private Socket socket;
private JTextArea ta=new JTextArea();
private JTextField tf=new JTextField();
Container cc;
//服务端
public MyTcp(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cc=this.getContentPane();
final JScrollPane scrollPane=new JScrollPane();
scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
getContentPane().add(scrollPane,BorderLayout.CENTER);
scrollPane.setViewportView(ta);
cc.add(tf,"South");
//焦点监听器
class JTextFieldListener implements FocusListener{
private String hintText; //提示文字
private JTextField textField;
public JTextFieldListener(JTextField textField,String hintText) {
this.textField=textField;
this.hintText=hintText;
textField.setText(hintText); //默认直接显示
textField.setForeground(Color.GRAY);
}
@Override
public void focusGained(FocusEvent e) {
//获取焦点时,清空提示内容
String temp=textField.getText();
if(temp.equals(hintText)){
textField.setText("");
textField.setForeground(Color.BLACK);
}
}
@Override
public void focusLost(FocusEvent e) {
//失去焦点时,没有输入内容,显示提示内容
String temp=textField.getText();
if(temp.equals("")) {
textField.setForeground(Color.GRAY);
textField.setText(hintText);
}
}
}
tf.addFocusListener(new JTextFieldListener(tf,"请在此输入内容"));
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(tf.getText().isEmpty()) {
JOptionPane.showMessageDialog(MyTcp.this, "请输入内容!");
}else {
writer.println(tf.getText());
ta.append("服务端发送:"+tf.getText()+"\n");
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
}
}
});
}
void getServer(){
try {
server=new ServerSocket(8998); //实例化Socket对象
ta.append("服务器套接字已创建成功\n");
while(true) {
ta.append("等待客户机的连接\n");
socket=server.accept(); //accept()方法会返回一个和客户端Socket对象相连的Socket对象
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(),true);
getClientMessage(reader,writer);
}
}catch(Exception e) {
e.printStackTrace();
}
}
//读取客户端发送过来的信息
private void getClientMessage(BufferedReader sin,PrintWriter os) {
try {
while(true) {
//获得客户端信息
ta.append("客户机:"+reader.readLine()+"\n");
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
}
}catch(Exception e) {
e.printStackTrace();
}
try {
if(reader!=null) {
reader.close();
}
if(socket!=null) {
socket.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MyTcp tcp=new MyTcp("向客户端发送数据");
tcp.setSize(400, 400);
tcp.setVisible(true);
tcp.getServer();
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import static java.lang.System.out;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
//客户端
public class MyClient extends JFrame{
private PrintWriter writer;
private BufferedReader reader;
private ServerSocket server;
Socket socket;
private JTextArea ta=new JTextArea();
private JTextField tf=new JTextField();
Container cc;
public MyClient(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cc=this.getContentPane();
final JScrollPane scrollPane=new JScrollPane();
scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
getContentPane().add(scrollPane,BorderLayout.CENTER);
scrollPane.setViewportView(ta);
cc.add(tf,"South");
//焦点监听器
class JTextFieldListener implements FocusListener{
private String hintText; //提示文字
private JTextField textField;
public JTextFieldListener(JTextField textField,String hintText) {
this.textField=textField;
this.hintText=hintText;
textField.setText(hintText); //默认直接显示
textField.setForeground(Color.GRAY);
}
@Override
public void focusGained(FocusEvent e) {
//获取焦点时,清空提示内容
String temp=textField.getText();
if(temp.equals(hintText)){
textField.setText("");
textField.setForeground(Color.BLACK);
}
}
@Override
public void focusLost(FocusEvent e) {
//失去焦点时,没有输入内容,显示提示内容
String temp=textField.getText();
if(temp.equals("")) {
textField.setForeground(Color.GRAY);
textField.setText(hintText);
}
}
}
tf.addFocusListener(new JTextFieldListener(tf,"请在此输入内容"));
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(tf.getText().isEmpty()) {
JOptionPane.showMessageDialog(MyClient.this, "请输入内容!");
}else {
writer.println(tf.getText());
ta.append("客户发送:"+tf.getText()+"\n");
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
}
}
});
}
void connect() {
ta.append("尝试连接\n");
try {
socket=new Socket("127.0.0.1",8998);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
ta.append("完成连接\n");
writer=new PrintWriter(socket.getOutputStream());
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//getServerMessage(reader,writer);去掉注释后窗口无法打开
}catch(Exception e) {
e.printStackTrace();
}
}
//读取服务端发送过来的信息
private void getServerMessage(BufferedReader sin,PrintWriter os) {
try {
while(true) {
//获得客户端信息
ta.append("服务机:"+reader.readLine()+"\n");
ta.setSelectionEnd(ta.getText().length());
tf.setText("");
}
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//EventQueue事件队列,封装了异步事件指派机制
EventQueue.invokeLater(new Runnable(){
public void run() {
MyClient client=new MyClient("向服务器发送数据");
client.setSize(400,400);
client.setVisible(true);
client.connect();
}
});
}
}
//获得客户端信息ta.append("客户机:"+reader.readLine()+"\n");ta.setSelectionEnd(ta.getText().length());
tf.setText("");
服务端这句代码,并没有把客户端发送的消息显示在对应组件上。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员【8折】购 ,仅需→¥23.2,即可享受5次/月 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m