java socket实现全双工通信
来源:互联网 发布:深孔钻编程视频教程 编辑:程序博客网 时间:2024/04/27 22:31
单工、半双工和全双工的定义
如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。
如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。
如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。
用swing 做的简单界面 实现了客户端和服务器端全双工通信。
Server端代码:
package cn.cblue.net1;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;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 javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;/** * @Description: 服务端 * @author huangzjb cblue2013@126.com * @Company Digital China * @date 2014-6-4 下午02:18:06 * @version 1.0 */public class MyServer extends JFrame implements ActionListener {JTextArea jta = null;JTextField jtf = null;JButton jb = null;JPanel jp1 = null;JScrollPane jsp = null;PrintWriter pw = null;public static void main(String[] args) {new MyServer();}public MyServer() {jta = new JTextArea();jsp = new JScrollPane(jta);jtf = new JTextField(10);// 注册回车事件jtf.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_ENTER) {sendMessage();}}});jb = new JButton("发送");jb.addActionListener(this);// 注册一个监听事件jp1 = new JPanel();jp1.add(jtf);jp1.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(jp1, BorderLayout.SOUTH);this.setTitle("chat server");this.setSize(300, 200);this.setVisible(true);// 接收从客户端发送过来的消息try {ServerSocket ss = new ServerSocket(2222);Socket s = ss.accept();BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));pw = new PrintWriter(s.getOutputStream(), true);// 写成pw = new PrintWriter(s.getOutputStream())会有问题while (true) {String info = in.readLine();String str = null;if (jta.getText() == null || "".equals(jta.getText())) {str = "Server:" + info;} else {str = jta.getText() + "\r\nServer:" + info;}jta.setText(str);jta.setCaretPosition(jta.getDocument().getLength());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 把信息给客户端@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == jb) {sendMessage();}}/** * @Description: 发送消息给客户端 * @throws */public void sendMessage() {String info = jtf.getText();pw.println(info);pw.flush();jtf.setText("");if (jta.getText() == null || "".equals(jta.getText())) {jta.append("Client:" + info);} else {jta.append("\r\nClient:" + info);}jta.setCaretPosition(jta.getDocument().getLength());// 设置滚动条自动滚动}}
Client端代码:
package cn.cblue.net1;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;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;/** * @Description: 客户端 * @author huangzjb cblue2013@126.com * @Company Digital China * @date 2014-6-4 下午02:18:24 * @version 1.0 */public class MyClient extends JFrame implements ActionListener {JTextArea jta = null;JTextField jtf = null;JButton jb = null;JPanel jp1 = null;JScrollPane jsp = null;PrintWriter pw = null;public static void main(String[] args) {new MyClient();}public MyClient() {jta = new JTextArea();jsp = new JScrollPane(jta);jtf = new JTextField(10);// 注册回车事件jtf.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_ENTER) {sendMessage();}}});jb = new JButton("发送");jb.addActionListener(this);// 注册一个监听事件jp1 = new JPanel();jp1.add(jtf);jp1.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(jp1, BorderLayout.SOUTH);this.setTitle("chat client");this.setSize(300, 200);this.setVisible(true);// 接收从服务端发送过来的消息try {Socket s = new Socket("127.0.0.1", 2222);BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));pw = new PrintWriter(s.getOutputStream(), true);while (true) {String info = in.readLine();String str = null;if (jta.getText() == null || "".equals(jta.getText())) {str = "Server:" + info;} else {str = jta.getText() + "\r\nServer:" + info;}jta.setText(str);jta.setCaretPosition(jta.getDocument().getLength());}} catch (IOException e) {e.printStackTrace();}}// 把信息给服务器端@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource() == jb) {sendMessage();}}/** * @Description: 发送消息给服务器端 * @throws */public void sendMessage() {String info = jtf.getText();pw.println(info);pw.flush();jtf.setText("");if (jta.getText() == null || "".equals(jta.getText())) {jta.append("Client:" + info);} else {jta.append("\r\nClient:" + info);}jta.setCaretPosition(jta.getDocument().getLength());// 设置滚动条自动滚动}}
4 1
- java socket实现全双工通信
- Java学习笔记-----Socket全双工通信
- (3)java网络socket通信---半双工、全双工
- Java实现全双工串口通信
- 利用java实现串口全双工通信
- Python socket实现多对多全双工通信
- (java)socket全双工长连接通信实例
- python socket编程实现半双工与全双工聊天
- 用Winsock实现语音全双工通信
- WCF实现全双工通信笔记
- UDP全双工通信的实现
- C# Tcp 全双工通信 实现
- 【python网络编程】利用select实现socket全双工异步通信
- Java实现串口全双工通讯
- 利用Java实现串口全双工通讯
- 利用Java实现串口全双工通讯
- 利用Java实现串口全双工通讯
- 利用Java实现串口全双工通讯
- SourceKitService Terminated Editor functionality temporarily limited.
- Facade模式
- 遇到 Form 性能问题怎么办 performance issue
- c++的重载、覆盖和遮蔽(隐藏)
- Android中使用代码截图的各种方法总结
- java socket实现全双工通信
- Struts2的Action中获取request,session,application对象
- 区位码、国标码、机内码
- 设计模式六大原则
- java中Date与String的相互转化
- mysql master-slave备份配置文档
- WCF入门--发布到IIS并引用
- 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
- Spring Security3.1实践