今天小小的弄了一个全双工,加了一个简单的界面,还是能够基本完成相互发送信息的需求的
代码如下:
服务器端:
//简易全双工
package ServerTest3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class MyServer3 extends JFrame{
//先做一个简单的界面
JButton sendButton = new JButton("发送");
JTextField sendField = new JTextField(10);
JTextArea showArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(showArea);
JPanel sendPanel = new JPanel();
PrintWriter pw;
public MyServer3(){
ActionListener sendActionListener = new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String sendinfo = sendField.getText();
pw.println(sendinfo);
sendField.setText("");
}
};
sendButton.addActionListener(sendActionListener);
sendPanel.add(sendField);
sendPanel.add(sendButton);
//为了更加像一个显示窗口 我让禁止在内容显示窗口的编辑
//屏蔽键盘事件或许更好些 不过小弟技术有限
showArea.setEditable(false);
this.add(scrollPane);
this.add(sendPanel,BorderLayout.SOUTH);
this.setSize(300, 200);
this.setTitle("服务器端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
//监听本机端口9999
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
showArea.append("连接成功\n");
//PrintWriter必须要和Socket在一块哦 因为这俩个是联系在一起的 不然发不对地方的
//不过为了让下面的sendActionListener使用
//可以定义成全局变量
pw = new PrintWriter(s.getOutputStream(),true);
//不断接收来自客户端的信息
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
while(true){
String getinfo = br.readLine();
showArea.append("客户端发来信息:"+getinfo+"\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer3 ms3 = new MyServer3();
}
}
客户端:
//简易全双工
package ClientTest3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class MyClient3 extends JFrame{
//先做一个简单的界面
JButton sendButton = new JButton("发送");
JTextField sendField = new JTextField(10);
JTextArea showArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(showArea);
JPanel sendPanel = new JPanel();
PrintWriter pw;
;
public MyClient3(){
//定义发送按钮的事件
ActionListener sendActionListener = new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String sendinfo = sendField.getText();
pw.println(sendinfo);
sendField.setText("");
}
};
sendButton.addActionListener(sendActionListener);
sendPanel.add(sendField);
sendPanel.add(sendButton);
//为了更加像一个显示窗口 我让禁止在内容显示窗口的编辑
//屏蔽键盘事件或许更好些 不过小弟技术有限
showArea.setEditable(false);
this.add(scrollPane);
this.add(sendPanel,BorderLayout.SOUTH);
this.setSize(300, 200);
this.setTitle("客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//连接本机端口9999
try {
Socket s = new Socket("127.0.0.1",9999);
showArea.append("连接成功\n");
pw = new PrintWriter(s.getOutputStream(),true);
//接受来自服务器的信息
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
while(true){
String getinfo = br.readLine();
showArea.append("服务器发来信息:"+getinfo+"\n");
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyClient3 ms3 = new MyClient3();
}
}
效果图: