[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> ...
随机推荐
- Linq101-Partitioning
using System; using System.Linq; namespace Linq101 { class Partitioning { /// <summary> /// Th ...
- LINUX 内核代码 errno 错误代码提示 /include/asm/errno.h
首先在自己的程序中#include<errno.h> 添加打印errno的语句 printf("errno is: %d\n",errno); 根据errno的值查错. ...
- Ajax简单应用-购物车
1. 2. 3. 4. 5. 6.
- 关于Core Data的一些整理(二)
关于Core Data的一些整理(二) 创建NSManagedObject的子类时,有一点是在这中间要强调的一点是,要不要勾选 Use scalar properties for primitive ...
- php 与 ajax 获取123的案例
同事问我,咱们从数据库里面获取数据,用ajax的方式展示到前台页面.啥都不说了,动手写个案例吧. 1,建立一个页面: <!DOCTYPE html PUBLIC "-//W3C//DT ...
- Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于 ...
- 21 Merge Two Sorted Lists(两链表归并排序Easy)
题目意思:对两个递增链表进行归并排序 思路:没什么好说的,二路归并 /** * Definition for singly-linked list. * struct ListNode { * int ...
- C# 构造函数如何调用父类构造函数或其他构造函数
class C : B{ C() : base(5) // call base constructor B(5) { } C(int i) : this() // ca ...
- linux处理闰秒
闰秒的介绍可以参考维基百科 https://zh.wikipedia.org/wiki/闰秒 linux处理闰秒 Linux使用UTC时钟,并通过NTP (Network time protocol) ...
- Fireworks Extension —— AutoSlice 介绍
前不久在网上到处瞎晃的时候,发现Adobe的软件几乎都可以写插件.Fireworks更是很早的版本就支持使用javascript编写插件,于是乎如入桃园,奋斗几日为VD小伙伴们写了一个插件,命名Aut ...