[Java] Tcp/udp 简单通信
本文转自 我自己的博客guozeyiblog.cn 欢迎来訪
效果图:
//UDP通信 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.*; import javax.swing.*; class send extends JFrame implements ActionListener{ private JTextArea Chat; //显示框 private JTextField Mes; //输入框 DatagramSocket soc; public send(){ //构造函数 try { soc = new DatagramSocket(); } catch (SocketException e) { // TODO 自己主动生成的 catch 块 e.printStackTrace(); } GUI("client"); while(true){ GetMsg(); } } public static void main(String args[]){ new send(); } public void GUI(String str){ //图形化界面 this.setTitle(str); Container container = this.getContentPane(); JButton send = new JButton("发送"); JLabel msg = new JLabel("消息内容"); Chat = new JTextArea(); Mes = new JTextField(20); Chat.setEditable(false); JScrollPane contain = new JScrollPane(); //滚动框 contain.setViewportView(Chat); container.setLayout(new BorderLayout()); //设置布局方式 container.add(contain,BorderLayout.CENTER); JPanel botton = new JPanel(); Mes.addActionListener(this); send.addActionListener(this); //绑定监听 botton.add(msg); botton.add(Mes); botton.add(send); container.add(botton,BorderLayout.SOUTH); this.show(true); this.setSize(600, 400); } //与Button绑定的方法 public void actionPerformed(ActionEvent e) { String str = Mes.getText(); //取得文本域的内容 if(str.equals("")){ Chat.append("提示:消息不能够为空!!!\n"); }else{ Chat.append("我说:"+str+"\n"); //UDP发包 SendMsg(str); } Mes.setText(""); } //发包 public void SendMsg(String str){ try { DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("127.0.0.1"),11190); soc.send(packet); } catch (Exception e) { // TODO 自己主动生成的 catch 块 e.printStackTrace(); } } //接收 public void GetMsg(){ byte data[]= new byte[1024]; DatagramPacket packet = new DatagramPacket(data,data.length); try { //DatagramSocket soc = new DatagramSocket(); soc.receive(packet); } catch (IOException e) { // TODO 自己主动生成的 catch 块 e.printStackTrace(); } Chat.append("服务:"+new String(packet.getData(),0,packet.getData().length)+"\n"); } } //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.*; import javax.swing.*; class recevice extends JFrame implements ActionListener{ private JTextArea Chat; //显示框 private JTextField Mes; //输入框 DatagramSocket soc; InetAddress adr; int port; public recevice(){ //构造函数 try { soc = new DatagramSocket(11190); } catch (SocketException e) { // TODO 自己主动生成的 catch 块 e.printStackTrace(); } GUI("服务端"); while(true){ GetMsg(); } } public static void main(String args[]){ new recevice(); } public void GUI(String str){ //图形化界面 this.setTitle(str); Container container = this.getContentPane(); JButton send = new JButton("发送"); JLabel msg = new JLabel("消息内容"); Chat = new JTextArea(); Mes = new JTextField(20); Chat.setEditable(false); JScrollPane contain = new JScrollPane(); //滚动框 contain.setViewportView(Chat); container.setLayout(new BorderLayout()); //设置布局方式 container.add(contain,BorderLayout.CENTER); JPanel botton = new JPanel(); Mes.addActionListener(this); send.addActionListener(this); //绑定监听 botton.add(msg); botton.add(Mes); botton.add(send); container.add(botton,BorderLayout.SOUTH); this.show(true); this.setSize(600, 400); } //与Button绑定的方法 public void actionPerformed(ActionEvent e) { String str = Mes.getText(); //取得文本域的内容 if(str.equals("")){ Chat.append("提示:消息不能够为空!!!\n"); }else{ Chat.append("我说:"+str+"\n"); //UDP发包 SendMsg(str); } Mes.setText(""); } //发包 public void SendMsg(String str){ try { DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length,adr,port); //DatagramSocket soc = new DatagramSocket(); soc.send(packet); } catch (Exception e) { // TODO 自己主动生成的 catch 块 e.printStackTrace(); } } //接收 public void GetMsg(){ byte data[]= new byte[1024]; DatagramPacket packet = new DatagramPacket(data,1024); try { soc.receive(packet); adr=packet.getAddress(); port=packet.getPort(); } catch (IOException e) { // TODO 自己主动生成的 catch 块 e.printStackTrace(); } Chat.append("客户:"+new String(packet.getData(),0,packet.getData().length)+"\n"); } } ----------------------------------------------------------------------------------------------------------------------------------------- //tcp实现 <服务端> import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class getmsg extends JFrame implements Action{ private JTextArea Chat ; private JTextField sms ; private ServerSocket serverSocket ; private Socket socket; DataInputStream in; public static void main(String[] args) { new getmsg(); } public getmsg() { GUI("服务端"); try { serverSocket = new ServerSocket(20000); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { socket = new Socket(); socket = serverSocket.accept(); in = new DataInputStream(socket.getInputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } new getmes().start(); } /** * 获取消息线程 */ class getmes extends Thread{ @Override public void run() { super.run(); while(true){ try { Chat.append("对方: >"+in.readUTF()+"\n"); //in.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } /** * 发送消息线程 */ class sendmes extends Thread{ @Override public void run() { super.run(); System.out.println("发送线程"); DataOutputStream out; try { out = new DataOutputStream(socket.getOutputStream()); //System.out.println(">>>>"+socket.isClosed()); //System.out.println(">>>>"+sms.getText().trim()); out.writeUTF(sms.getText().trim()); //out.close(); Chat.append("我: >"+sms.getText().trim()+"\n"); sms.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void GUI(String title){ this.setTitle(title); Container container = this.getContentPane(); Chat = new JTextArea(); //内容显示框 JScrollPane center = new JScrollPane(); //滚动版 sms = new JTextField(20); JButton send = new JButton("发送"); JLabel mes = new JLabel("输入消息:"); container.setLayout(new BorderLayout()); center.setViewportView(Chat); Chat.setEditable(false); container.add(center); JPanel bottom = new JPanel(); bottom.add(mes); bottom.add(sms); bottom.add(send); container.add(bottom,BorderLayout.SOUTH); this.setSize(600, 400); this.show(true); send.addActionListener(this); //设置监听 } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub new sendmes().start(); System.out.println(socket.isClosed()); } @Override public Object getValue(String key) { // TODO Auto-generated method stub return null; } @Override public void putValue(String key, Object value) { // TODO Auto-generated method stub } } <client> import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class send extends JFrame implements Action{ private JTextArea Chat ; private JTextField sms ; private Socket socket; private DataOutputStream out; private DataInputStream in; public static void main(String[] args) { new send(); } public send() { GUI("client"); try { socket = new Socket("192.168.56.1", 20000); in= new DataInputStream(socket.getInputStream()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //开启新线程 new rec().start(); } /** * 接收线程 */ class rec extends Thread{ @Override public void run() { super.run(); while(true){ try{ Chat.append("对方: >"+in.readUTF()+"\n"); }catch(Exception exception){} } } } /** * 发送线程 */ class sendmsg extends Thread{ @Override public void run() { super.run(); try { System.out.println(">>>>"+socket.getPort()+">>"+socket.getLocalAddress().toString()); out = new DataOutputStream(socket.getOutputStream()); out.writeUTF(sms.getText().trim()); //out.close(); Chat.append("我: >"+sms.getText().trim()+"\n"); sms.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 图形端 */ public void GUI(String title){ this.setTitle(title); Container container = this.getContentPane(); Chat = new JTextArea(); //内容显示框 JScrollPane center = new JScrollPane(); //滚动版 sms = new JTextField(20); JButton send = new JButton("发送"); JLabel mes = new JLabel("输入消息:"); container.setLayout(new BorderLayout()); center.setViewportView(Chat); Chat.setEditable(false); container.add(center); JPanel bottom = new JPanel(); bottom.add(mes); bottom.add(sms); bottom.add(send); container.add(bottom,BorderLayout.SOUTH); this.setSize(600, 400); this.show(true); send.addActionListener(this); //设置监听 } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.out.println("Onclick"); new sendmsg().start(); //发送信息启动新线程 } @Override public Object getValue(String key) { // TODO Auto-generated method stub return null; } @Override public void putValue(String key, Object value) { // TODO Auto-generated method stub } }
[Java] Tcp/udp 简单通信的更多相关文章
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.3
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- TCP/UDP简易通信
TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
[转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- Java TCP/UDP网络通信编程
本文转自:http://www.cnblogs.com/cdtarena/archive/2013/04/10/3012282.html 网络应用中基本上都是TCP(Transmission Cont ...
- C# tcp udp 串口 通信
简单的实现tcp同步和异步,udp,串口通信 static List<TcpClientState> clientArray = new List<TcpClientState> ...
随机推荐
- sql 学习笔记 p46
交换行 update tab1 set c1=c2,c2=c1 .说明sql是临时表的存储,在查询出来的结果为决定前,可以随意操纵临时表中的列 update tab set c1=c1+(selec ...
- ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON
在JavaScriptSerializer中,我们可以看到下面可以使用的方法或者构造函数,它们都是实例方法: Member Description JavaScriptSerializer() 构造函 ...
- L-value 和 R-value.
An L-value is something that can appear on the left side of an equal sign, An R-value is something t ...
- app发布流程详解
https://developer.apple.com 1. 点击 Member Center 2. 创建应用ID 3. 创建项目 4. 在AppStore创建对应的应用 5. 创建授权文件 6. 配 ...
- javascript基础学习(十四)
javascript之表单对象 学习要点: 表单对象 文本框 按钮 单选框和复选框 一.表单对象 在HTML文档中可能会出现多个表单,也就是说,一个HTML文档中可能出现多个<form>标 ...
- javascript基础学习(十二)
javascript之BOM 学习要点: 屏幕对象 History对象 Location对象 一.屏幕对象 Screen对象是一个由javascript自动创建的对象,该对象的主要作用是描述客户端的显 ...
- Nginx源码研究四:NGINX的内存管理
关于nginx的内存使用,我们先看代码,下面是nginx_cycle.c中对全局数据结构cycle的初始化过程 pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, ...
- curl 解析
获得页面 使用命令:curl http://curl.haxx. se 这是最简单的使用方法.用这个命令获得了http://curl.haxx. se指向的页面,同样,如果这里的URL指向的是一个文件 ...
- 2-16 HDO1106
这题寒假也没搞出来,但今天花了一小时终于搞定. 题意是输入一串数字字符,把‘5’当作空格,然后把被分割开的数字进行排序输出. 首先是字符串输入,按照高精度的处理方法,数值低位放到数组低位.(字符串型的 ...
- SQL数据库增删改查
数据类型 运行cmd 输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据库服务 输入net pause MSSQLserve ...