[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> ...
随机推荐
- eclipse打包jar时包含第三方jar包的相关问题
我用的是mars4.5版本的eclipse 需求:要把写好的工程打成jar包,并能直接运行.工程用了若干个第三方jar. 在打包的时候,eclipse提供的打包方法不能引用第三方jar包,导致了出现C ...
- 4.HTTP入门
什么是http协议查看http协议的工具http协议内容Http请求请求行http协议版本请求资源请求方式GET方式提交POST方式提交请求头3.3 实体内容3.4 HttpServletReques ...
- hibernate_validator_06
认证组(校验组) 校验组能够让你在验证的时候选择应用哪些约束条件. 这样在某些情况下( 例如向导 ) 就可以对每一步进行校验的时候, 选取对应这步的那些约束条件进行验证了. 校验组是通过可变参数传递给 ...
- hive 桶相关特性分析
1. hive 桶相关概念 桶(bucket)是指将表或分区中指定列的值为key进行hash,hash到指定的桶中,这样可以支持高效采样工作. 抽样( sampling )可以在全体数 ...
- C# Word
C# 操作word文档 1.c#操作word 在指定书签插入文字或者图片 1using Word = Microsoft.Office.Interop.Word; 2 3object Nothing ...
- oracle常用SQL总结
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...
- matplotlib入门--1(条形图, 直方图, 盒须图, 饼图)
作图首先要进行数据的输入,matplotlib包只提供作图相关功能,本身并没有数据读入.输出函数,针对各种试验或统计文本数据输入可以使用numpy提供的数据输入函数. # -*- coding: gb ...
- Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())[4]
数据库版本升级对软件的管理操作. 我们手机经常会收到xxx软件升级什么的提醒,你的软件版本更新,同时你的数据库对应的版本也要相应的更新. 数据库版本更新需要主要的问题: 软件的1.0版本升级到1.1版 ...
- 【转】 Linux中的工作队列
原文网址:http://blog.chinaunix.net/uid-20583479-id-1920134.html 工作队列一般用来做滞后的工作,比如在中断里面要做很多事,但是比较耗时,这时就可以 ...
- 32位vs2010的项目如何在64位系统上运行
64位注册 1. 关闭Visual Studio.2. 在Visual Studio Tools目录,以管理员身份运行Visual Studio Command Prompt (2010),[注:这个 ...