用java语言编写对话(用java编写聊天程序)

本篇文章给大家谈谈用java语言编写对话,以及用java编写聊天程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、求用java语言做一个简单的聊天程序2、,用Java语言编写一个程序,用两个线程模拟对话,任何一个线程都可以随时收发信息.3、用JAVA 编写简单网络聊天程序4、用java编写一个程序,程序运行时弹出一个输入对话框,用户使用该对话5、在java中怎么定义一个男和女进行对话

求用java语言做一个简单的聊天程序

嗯,我这里有!你要求这样,代码很长的!邮箱也不留?怎么给你?

已经发送到你们的邮箱咯!请查收!~但愿能帮到你们!~

用java语言编写对话(用java编写聊天程序)

,用Java语言编写一个程序,用两个线程模拟对话,任何一个线程都可以随时收发信息.

//server

public class TestNIOSocketServer{

// 通道管理器

private Selector selector;

public void initServer(int port) throws Exception{

// 获得一个ServerSocket通道

ServerSocketChannel serverChannel=ServerSocketChannel.open();

// 设置通道为 非阻塞

serverChannel.configureBlocking(false);

// 将该通道对于的serverSocket绑定到port端口

serverChannel.socket().bind(new InetSocketAddress(port));

// 获得一耳光通道管理器

this.selector=Selector.open();

// 将通道管理器和该通道绑定,并为该通道注册selectionKey.OP_ACCEPT事件

// 注册该事件后,当事件到达的时候,selector.select()会返回,

// 如果事件没有到达selector.select()会一直阻塞

serverChannel.register(selector,SelectionKey.OP_ACCEPT);

}

// 采用轮训的方式监听selector上是否有需要处理的事件,如果有,进行处理

public void listen() throws Exception{

System.out.println(“start server”);

// 轮询访问selector

while(true){

// 当注册事件到达时,方法返回,否则该方法会一直阻塞

selector.select();

// 获得selector中选中的相的迭代器,选中的相为注册的事件

Iterator ite=this.selector.selectedKeys().iterator();

while(ite.hasNext()){

SelectionKey key=(SelectionKey)ite.next();

// 删除已选的key 以防重负处理

ite.remove();

// 客户端请求连接事件

if(key.isAcceptable()){

ServerSocketChannel server=(ServerSocketChannel)key.channel();

// 获得和客户端连接的通道

SocketChannel channel=server.accept();

// 设置成非阻塞

channel.configureBlocking(false);

// 在这里可以发送消息给客户端

channel.write(ByteBuffer.wrap(new String(“hello client”).getBytes()));

// 在客户端 连接成功之后,为了可以接收到客户端的信息,需要给通道设置读的权限

channel.register(this.selector,SelectionKey.OP_READ);

// 获得了可读的事件

//sentCommond(channel,”你好,世界”);

}else if(key.isReadable()){

read(key);

}

Thread.sleep(1000);

}

}

}

public void sentCommond(SocketChannel channel,String commond) throws IOException{

Charset charset = Charset.forName(“UTF-8”);

channel.write(charset.encode(commond).asReadOnlyBuffer());

channel.register(this.selector,SelectionKey.OP_READ);

}

// 处理 读取客户端发来的信息事件

private void read(SelectionKey key) throws Exception{

// 服务器可读消息,得到事件发生的socket通道

SocketChannel channel=(SocketChannel)key.channel();

// 穿件读取的缓冲区

ByteBuffer buffer=ByteBuffer.allocate(1024);

channel.read(buffer);

byte[] data=buffer.array();

String msg=new String(data).trim();

System.out.println(“server receive from client: “+msg);

ByteBuffer outBuffer=ByteBuffer.wrap(“hello client”.getBytes());

channel.write(outBuffer);

}

public static void main(String[] args) throws Throwable{

TestNIOSocketServer server=new TestNIOSocketServer();

server.initServer(8989);

server.listen();

}

}

//client

public class TestNIOSocketClient{

// 通道管理器

private Selector selector;

/**

 * * // 获得一个Socket通道,并对该通道做一些初始化的工作 * @param ip 连接的服务器的ip // * @param port 连接的服务器的端口号 * @throws IOException

 */

public void initClient(String ip,int port) throws IOException{ // 获得一个Socket通道

SocketChannel channel=SocketChannel.open(); // 设置通道为非阻塞

channel.configureBlocking(false); // 获得一个通道管理器

this.selector=Selector.open(); // 客户端连接服务器,其实方法执行并没有实现连接,需要在listen()方法中调

// 用channel.finishConnect();才能完成连接

channel.connect(new InetSocketAddress(ip,port));

// 将通道管理器和该通道绑定,并为该通道注册SelectionKey.OP_CONNECT事件。

channel.register(selector,SelectionKey.OP_CONNECT);

}

/**

 * * // 采用轮询的方式监听selector上是否有需要处理的事件,如果有,则进行处理 * @throws // IOException

 * 

 * @throws Exception

 */

@SuppressWarnings(“unchecked”)

public void listen() throws Exception{ // 轮询访问selector

while(true){

// 选择一组可以进行I/O操作的事件,放在selector中,客户端的该方法不会阻塞,

// 这里和服务端的方法不一样,查看api注释可以知道,当至少一个通道被选中时,

// selector的wakeup方法被调用,方法返回,而对于客户端来说,通道一直是被选中的

selector.select(); // 获得selector中选中的项的迭代器

Iterator ite=this.selector.selectedKeys().iterator();

while(ite.hasNext()){

SelectionKey key=(SelectionKey)ite.next(); // 删除已选的key,以防重复处理

ite.remove(); // 连接事件发生

if(key.isConnectable()){

SocketChannel channel=(SocketChannel)key.channel(); // 如果正在连接,则完成连接

if(channel.isConnectionPending()){

channel.finishConnect();

} // 设置成非阻塞

channel.configureBlocking(false);

// 在这里可以给服务端发送信息哦

channel.write(ByteBuffer.wrap(new String(“hello server!”).getBytes()));

// 在和服务端连接成功之后,为了可以接收到服务端的信息,需要给通道设置读的权限。

channel.register(this.selector,SelectionKey.OP_READ); // 获得了可读的事件

}else if(key.isReadable()){

read(key);

}

}

}

}

private void read(SelectionKey key) throws Exception{

SocketChannel channel=(SocketChannel)key.channel();

// 穿件读取的缓冲区

ByteBuffer buffer=ByteBuffer.allocate(1024);

channel.read(buffer);

byte[] data=buffer.array();

String msg=new String(data).trim();

System.out.println(“client receive msg from server:”+msg);

ByteBuffer outBuffer=ByteBuffer.wrap(“hello server”.getBytes());

channel.write(outBuffer);

}

/**

 * * // 启动客户端测试 * @throws IOException

 * 

 * @throws Exception

 */

public static void main(String[] args) throws Exception{

TestNIOSocketClient client=new TestNIOSocketClient();

client.initClient(“www.easyaq.com”,8989);

client.listen();

}

}

用JAVA 编写简单网络聊天程序

/**

* 基于UDP协议的聊天程序

*

* 2007.9.18

* */

//导入包

import java.awt.*;

import java.awt.event.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import java.net.*;

public class Chat extends JFrame implements ActionListener

{

//广播地址或者对方的地址

public static final String sendIP = “172.18.8.255”;

//发送端口9527

public static final int sendPort = 9527;

JPanel p = new JPanel();

List lst = new List(); //消息显示

JTextField txtIP = new JTextField(18); //填写IP地址

JTextField txtMSG = new JTextField(20); //填写发送消息

JLabel lblIP = new JLabel(“IP地址:”);

JLabel lblMSG = new JLabel(“消息:”);

JButton btnSend = new JButton(“发送”);

byte [] buf;

//定义DatagramSocket的对象必须进行异常处理

//发送和接收数据报包的套接字

DatagramSocket ds = null;

//=============构造函数=====================

public Chat()

{

CreateInterFace();

//注册消息框监听器

txtMSG.addActionListener(this);

btnSend.addActionListener(this);

try

{

//端口:9527

ds =new DatagramSocket(sendPort);

}

catch(Exception ex)

{

ex.printStackTrace();

}

//============接受消息============

//匿名类

new Thread(new Runnable()

{

public void run()

{

byte buf[] = new byte[1024];

//表示接受数据报包

while(true)

{

try

{

DatagramPacket dp = new DatagramPacket(buf,1024,InetAddress.getByName(txtIP.getText()),sendPort);

ds.receive(dp);

lst.add(“【消息来自】◆” + dp.getAddress().getHostAddress() + “◆”+”【说】:” + new String (buf,0,dp.getLength()) /*+ dp.getPort()*/,0);

}

catch(Exception e)

{

if(ds.isClosed())

{

e.printStackTrace();

}

}

}

}

}).start();

//关闭窗体事件

this.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent w)

{

System.out.println(“test”);

int n=JOptionPane.showConfirmDialog(null,”是否要退出?”,”退出”,JOptionPane.YES_NO_OPTION);

if(n==JOptionPane.YES_OPTION)

{

dispose();

System.exit(0);

ds.close();//关闭ds对象//关闭数据报套接字

}

}

});

}

//界面设计布局

public void CreateInterFace()

{

this.add(lst,BorderLayout.CENTER);

this.add(p,BorderLayout.SOUTH);

p.add(lblIP);

p.add(txtIP);

p.add(lblMSG);

p.add(txtMSG);

p.add(btnSend);

txtIP.setText(sendIP);

//背景颜色

lst.setBackground(Color.yellow);

//JAVA默认风格

this.setUndecorated(true);

this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

this.setSize(600,500);

this.setTitle(“〓聊天室〓”);

this.setResizable(false);//不能改变窗体大小

this.setLocationRelativeTo(null);//窗体居中

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

this.setVisible(true);

txtMSG.requestFocus();//消息框得到焦点

}

//===============================Main函数===============================

public static void main(String[]args)

{

new Chat();

}

//================================发送消息===============================

//消息框回车发送消息事件

public void actionPerformed(ActionEvent e)

{

//得到文本内容

buf = txtMSG.getText().getBytes();

//判断消息框是否为空

if (txtMSG.getText().length()==0)

{

JOptionPane.showMessageDialog(null,”发送消息不能为空”,”提示”,JOptionPane.WARNING_MESSAGE);

}

else{

try

{

InetAddress address = InetAddress.getByName(sendIP);

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);

ds.send(dp);

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

txtMSG.setText(“”);//清空消息框

//点发送按钮发送消息事件

if(e.getSource()==btnSend)

{

buf = txtMSG.getText().getBytes();

try

{

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);

}

catch(Exception ex)

{

ex.printStackTrace();

}

txtMSG.setText(“”);//清空消息框

txtMSG.requestFocus();

}

}

}

用java编写一个程序,程序运行时弹出一个输入对话框,用户使用该对话

package cn.fu;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

import javax.swing.JLabel;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.Window.Type;

public class Login extends JFrame {

 private JPanel contentPane;

 private JTextField textField;

 /**

  * Launch the application.

  */

 public static void main(String[] args) {

  EventQueue.invokeLater(new Runnable() {

   public void run() {

    try {

     Login frame = new Login();

     frame.setVisible(true);

    } catch (Exception e) {

     e.printStackTrace();

    }

   }

  });

 }

 /**

  * Create the frame.

  */

 public Login() {

  setTitle(“工具”);

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  setBounds(100, 100, 450, 300);

  contentPane = new JPanel();

  contentPane.setToolTipText(“”);

  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

  setContentPane(contentPane);

  contentPane.setLayout(null);

  textField = new JTextField();

  textField.setBounds(121, 86, 194, 21);

  contentPane.add(textField);

  textField.setColumns(10);

  JLabel lblNewLabel = new JLabel(“请输入10位数以内的字符串”);

  lblNewLabel.setBounds(145, 59, 194, 15);

  contentPane.add(lblNewLabel);

  JButton btnNewButton = new JButton(“确定”);

  btnNewButton.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {

    String ca = textField.getText();

    int n = ca.length();

    if (n  10) {

     JOptionPane.showMessageDialog(null, “对不起,您输入的字符串长度超过10”,

       “错误提示”, JOptionPane.ERROR_MESSAGE);

    } else if (n = 0 || n = 10) {

     JOptionPane.showMessageDialog(null, “字符串长度为” + n, “提示”,

       JOptionPane.PLAIN_MESSAGE);

    }

   }

  });

  btnNewButton.setBounds(172, 130, 93, 23);

  contentPane.add(btnNewButton);

 }

}

在java中怎么定义一个男和女进行对话

在面向对象语言中,万物都可以用对象来表示,你所说的男女亦是如此。

定义1个类:人类; ——-人类应有的属性:姓名、年龄、性别以及所说的话(根据题意)

再定义两个类:男人、女人,这两个类都继承人类; —— 男人类中定义性别为男,女人类中定义性别为女,以区分这两个类的不同。

以上,就将男性和女性抽象出来了。

下一步,再定义一个测试类,在main方法中new 出男性 和 女性类的实例,就可以进行对话了。

用java语言编写对话的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于用java编写聊天程序、用java语言编写对话的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月29日 12:03:28
下一篇 2024年3月29日 12:17:56

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4600
  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    4100
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4400
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5800
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4500
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4500
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4800
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7500
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6500

发表回复

登录后才能评论



关注微信