DatagramSocket编程

DatagramSocket编程importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.IOException;importjava.ne

大家好,又见面了,我是你们的朋友全栈君。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Talk extends JFrame{
	JLabel la=new JLabel("请输入");
	JTextField tfd=new JTextField(20);
	JButton but=new JButton("发送");
	JPanel p=new JPanel();
	JTextArea jta=new JTextArea(10,20);
	Container c;
	DatagramSocket ds;
	DatagramReceive dc;
	int localPost=3000;
	int remotePost=5000;
	boolean flag=true;
	public void init(){
		c=this.getContentPane();
		c.setLayout(new BorderLayout());
		p.setLayout(new FlowLayout());
		p.add(la);p.add(tfd);p.add(but);
		c.add(p,BorderLayout.NORTH);
		c.add(jta,BorderLayout.CENTER);
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String temp=tfd.getText();
				jta.append("\n我说:"+temp);
				byte[] buf=temp.getBytes();
				try {
					DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),remotePost);
					try {
						ds.send(dp);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					if(temp.trim().equals("bye")){
						flag=false;
						//dc.close();
					}
				} catch (UnknownHostException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});
	this.setSize(500,500);
	this.setVisible(true);
	}
	public Talk(String name,int localPost,int remotePost){
		super(name);
		this.localPost=localPost;
		this.remotePost=remotePost;
		init();
		try {
			ds=new DatagramSocket(localPost);
			dc=new DatagramReceive(name,ds,jta);
			dc.start();
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			System.out.println("DatagramSocket创建失败");
		}
		
	}
	public static void main(String[] args) {
		Talk t1=new Talk("A",3000,5000);
		Talk t2=new Talk("B",5000,3000);
	}

}


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

import javax.swing.JTextArea;

public class DatagramReceive extends Thread{
	String name;
	DatagramSocket ds;
	JTextArea jta;
	boolean flag=true;
	public DatagramReceive(String name,DatagramSocket ds,JTextArea jta){
		this.name=name;
		this.ds=ds;
		this.jta=jta;
	}
		public void run(){
			while(flag){
				byte[] buf=new byte[1024];
				DatagramPacket dp=new DatagramPacket(buf,buf.length);
				try {
					ds.receive(dp);
					String temp=new String(buf,0,dp.getLength());
					jta.append("\n对方说:"+temp);
					if(temp.trim().equals("bye")){
						flag=false;
						ds.close();
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					System.out.println(name+"接受失败");
				}
				
			}
		}

}


DatagramSocket编程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138641.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月31日 上午7:16
下一篇 2022年5月31日 上午7:16


相关推荐

  • UML 时序图[通俗易懂]

    UML 时序图[通俗易懂]概念时序图(SequenceDiagram)描述了对象之间传递消息的时间顺序,用来表达用例中的行为顺序,是强调消息时间顺序的交互图。也就是说,时序图描述了类以及类间相互交换以完成期望行为的消息。内容时序图包括了4个元素,分别是对象(Object)、生命线(Lifeline)、激活(Activation)和消息(Message)。对象(Object)对象代表时序图中的对象…

    2022年6月16日
    32
  • js匹配换行符

    js匹配换行符letstr=str.replace(/\n/g,'<br/>’)持续更新前端知识

    2022年5月24日
    72
  • 菜鸟教程python3 mysql_MySQL菜鸟教程

    菜鸟教程python3 mysql_MySQL菜鸟教程页眉内容MySQL教程Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。在本教程中,会让大家快速掌握Mysql的基本知识,并轻松使用Mysql数据库。什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个…

    2025年7月30日
    3
  • 焦点科技怎么老是招人_为什么口腔老是溃疡 严重口腔溃疡怎么治「建议收藏」

    焦点科技怎么老是招人_为什么口腔老是溃疡 严重口腔溃疡怎么治「建议收藏」口腔溃疡作为最常见的口腔疾病日益引起人们的重视,很多患者的口腔溃疡由于得不到有效的治疗而变成复发性口腔溃疡,其中有20%的复发性口腔溃疡患者久治不愈引发白塞氏病。那么,为什么口腔老是溃疡,严重口腔溃疡怎么治呢?下面我们就来看看口腔黏膜专家的介绍。引起口腔溃疡的原因有很多1、免疫力下降许多的口腔溃疡患者总是在感冒时,口腔溃疡也同时会反反复作,而这个时候身体的抵抗力差,所以患者在治疗感冒的过程中,也不…

    2022年6月6日
    37
  • 2022美赛A题[通俗易懂]

    2022美赛A题[通俗易懂]2021美赛A题

    2022年4月29日
    45
  • pytest指定用例_pytest如何循环执行用例

    pytest指定用例_pytest如何循环执行用例前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

    2022年7月30日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号