java编写收发消息程序

java编写收发消息程序

代码参考:

https://github.com/GISWLH/java_send_project

任务目标

  • 程序设计,数据收发(格式自定、数据自定),用户界面自定 ,一个接收方,一个发送方;

  • 当接收方收到发送方发送的消息后,打印发送的消息及发送方的地址和端口号,之后向发送方反馈信息“收到了!”;

  • 发送方打印出接收方反馈的消息。

文档格式

文件 说明
README 作业说明
result 运行结果
src java源代码
out 编译后的文件

整个project可以用IDEA打开

先运行Recieve,再运行Sender

功能实现

数据收发

Receive

import javax.swing.*;
import java.awt.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import javax.swing.JLabel;
public class Receive {

    public static void main(String[] args) {
        try {
            InetAddress ip = InetAddress.getLocalHost();
            int port = 8888;

            // 创建接收方的套接字,并制定端口号和IP地址
            DatagramSocket getSocket = new DatagramSocket(port, ip);

            // 确定数据报接受的数据的数组大小
            byte[] buf = new byte[1024];

            // 创建接受类型的数据报,数据将存储在buf中
            DatagramPacket getPacket = new DatagramPacket(buf, buf.length);

            // 通过套接字接收数据
            getSocket.receive(getPacket); //有问题



            // 解析发送方传递的消息,并打印
            String getMes = new String(buf, 0, getPacket.getLength());

            System.out.println("对方发送的消息:" + getMes);

            // 通过数据报得到发送方的IP和端口号,并打印
            InetAddress sendIP = getPacket.getAddress();
            int sendPort = getPacket.getPort();

            System.out.println("对方的IP地址是:" + sendIP.getHostAddress());
            System.out.println("对方的端口号是:" + sendPort);

            // 通过数据报得到发送方的套接字地址
            SocketAddress sendAddress = getPacket.getSocketAddress();

            // 确定要反馈发送方的消息内容,并转换为字节数组
            String feedback = "收到了!";
            byte[] backBuf = feedback.getBytes();

            // 创建发送类型的数据报
            DatagramPacket sendPacket = new DatagramPacket(backBuf,
                    backBuf.length, sendAddress);

            // 通过套接字发送数据
            getSocket.send(sendPacket);

            // 关闭套接字
            getSocket.close();

            //窗口自定
            JFrame frame = new JFrame("Title for your window");

            JPanel panel = new JPanel();

            JLabel l = new JLabel();
            ImageIcon icon = new ImageIcon("img_1.png");     //在此直接创建对象,注意目录之间的分隔符是双斜线
            l.setIcon(icon);
            l.setBounds(10, 10, icon.getIconWidth(),icon.getIconHeight());
            panel.add(l,new Integer(Integer.MIN_VALUE));


            JLabel label = new JLabel("对方发送的消息:" + getMes );
            JLabel label1 = new JLabel("对方的IP地址是:" + sendIP.getHostAddress());
            JLabel label2 = new JLabel("对方的端口号是:" + sendPort);
            JLabel label_kong = new JLabel("           ");
            JLabel label3 = new JLabel("收到了!");
            Font f = new Font("宋体",Font.PLAIN,16);
            label3.setFont(f);
            label3.setForeground(Color.red);
            Container con = frame.getContentPane();    //用getContentPane()方法获得JFrame的内容面板
            con.setBackground(Color.blue);    //设置背景颜色为蓝色

            //距离屏幕左边100个像素,上边100个像素,窗口的宽是300,高是300
            frame.setBounds(100,100,300,300);    //设置窗口1在屏幕上的位置及大小
            frame.setVisible(true);
            panel.add(label);
            panel.add(label1);
            panel.add(label2);
            panel.add(label_kong);
            panel.add(label3);
            frame.add(panel);
            //Menu无法直接添加到容器中,只能直接添加到菜单容器中
            MenuBar mb = new MenuBar(); //创建菜单容器
            frame.setMenuBar(mb);
            //添加菜单
            Menu m1 = new Menu("File");
            Menu m2 = new Menu("Edit");
            Menu m3 = new Menu("Help");
            mb.add(m1);
            mb.add(m2);
            mb.add(m3);

            //添加菜单项
            MenuItem mi1 = new MenuItem("Save");
            MenuItem mi2 = new MenuItem("Load");
            MenuItem mi3 = new MenuItem("Quit");
            m1.add(mi1);
            m1.add(mi2);
            m1.addSeparator(); //添加分隔线
            m1.add(mi3);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Send

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Sender {
    public static void main(String[] args) {
        try {
            // 创建发送方的套接字,IP默认为本地,端口号随机
            System.out.println("Hello world!");
            DatagramSocket sendSocket = new DatagramSocket();

            // 确定要发送的消息:
            String mes = "这是我的java作业!";

            // 由于数据报的数据是以字符数组传的形式存储的,所以传转数据
            byte[] buf = mes.getBytes();

            // 确定发送方的IP地址及端口号,地址为本地机器地址
            int port = 8888;
            InetAddress ip = InetAddress.getLocalHost();

            // 创建发送类型的数据报:
            DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, ip,
                    port);

            // 通过套接字发送数据:
            sendSocket.send(sendPacket);

            // 确定接受反馈数据的缓冲存储器,即存储数据的字节数组
            byte[] getBuf = new byte[1024];

            // 创建接受类型的数据报
            DatagramPacket getPacket = new DatagramPacket(getBuf, getBuf.length);

            // 通过套接字接受数据
            sendSocket.receive(getPacket);

            // 解析反馈的消息,并打印
            String backMes = new String(getBuf, 0, getPacket.getLength());
            System.out.println("接受方返回的消息:" + backMes);

            // 关闭套接字
            sendSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

result

本文由mdnice多平台发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容