使用Java套接字编程来实现一个简单的聊天室,它可以支持至少两个用户(即客户端)之间的聊天。服务器程序正在等待来自客户端程序的连接。当客户端连接到服务器时,服务器会发送一条“新朋友”消息,以通知以前已经连接到服务器的另一个客户端。然后,可以通过服务器完成两个客户端之间的通信。您可以选择TCP或UDP来实现这些程序。
您应该使用PSFTP将服务器/客户端程序(即本地文件)上传到一个ip地址
您应该使用putty来编译和运行服务器程序。
您应该使用PSFTP或Java编辑器(例如,Netbeans或eclipse)来编译和运行您的客户端程序。
java套接字编程实现聊天室
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
CSDN专家-赖老师(软件之家) 2021-11-08 14:07最佳回答 专家已采纳package java3.T16; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; 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; /* * 用UDP技术实现简单聊天软件 * */ import javax.swing.JTextField; import javax.swing.JTextPane; public class UdpChat extends JFrame implements ActionListener,Runnable{ /* * 关键参数 * 1.自己的IP及端口, * 2.对方的IP及端口 * 3.启动线程的按钮 * 4.发送信息的按钮 * 5.聊天内容的文本区域框 * * */ JTextField txtSelfAddr,txtSelfPort,txtOtherAddr,txtOtherPort; JButton btnStart,btnSend,btnClose; //发送信息及接收信息的文本区域框 JTextPane txtChatMsg,txtReceMsg; //数据报Socket; DatagramSocket socket; public UdpChat() { super("用UDP技术实现简单聊天软件"); //自己的IP JLabel lblSelfAddr = new JLabel("自己IP:"); txtSelfAddr = new JTextField("127.0.0.1",8); //自己的端口 JLabel lblSelfPort = new JLabel("自己端口:"); txtSelfPort = new JTextField("8888",5); //对方IP JLabel lblOtherAddr = new JLabel("自己端口:"); txtOtherAddr = new JTextField("127.0.0.1",8); //对方端口 JLabel lblOtherPort = new JLabel("对方端口:"); txtOtherPort = new JTextField("8889",5); //启动线程的按钮 btnStart = new JButton("启动接收线程"); //发送信息 btnSend = new JButton("发送"); //关闭程序 btnClose = new JButton("关闭"); //注册按钮事件 btnStart.addActionListener(this); btnSend.addActionListener(this); btnClose.addActionListener(this); JPanel northPane = new JPanel(new FlowLayout()); northPane.add(lblSelfAddr); northPane.add(txtSelfAddr); northPane.add(lblSelfPort); northPane.add(txtSelfPort); northPane.add(lblOtherAddr); northPane.add(txtOtherAddr); northPane.add(lblOtherPort); northPane.add(txtOtherPort); northPane.add(btnStart); add(northPane,BorderLayout.NORTH); //聊天内容文本框放在中间 txtChatMsg = new JTextPane(); txtReceMsg = new JTextPane(); JPanel centerPane = new JPanel(new GridLayout(2,1,5,10)); centerPane.add(txtReceMsg); centerPane.add(txtChatMsg); add(centerPane); //发送按钮,关闭按钮放在底部右边 JPanel southPane = new JPanel(new FlowLayout(FlowLayout.RIGHT)); southPane.add(btnSend); southPane.add(btnClose); add(southPane,BorderLayout.SOUTH); setSize(800,500); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } //启动接收线程 public static void main(String[] args) { UdpChat chat = new UdpChat(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == btnClose) { System.exit(1); }else if(e.getSource() == btnStart) { //启动线程 Thread thread = new Thread(this); thread.start(); //把按钮状态设置为不可用状态 btnStart.setEnabled(false); }else if(e.getSource() == btnSend) { //获取对方的IP及端口 String host = txtOtherAddr.getText(); int port = Integer.parseInt(txtOtherPort.getText()); InetAddress netAddr; try { netAddr = InetAddress.getByName(host); //创建发送信息的Socket DatagramSocket socket = new DatagramSocket(); //获取发送文本框的内容 String msg = txtChatMsg.getText(); //创建数据报 byte b[] = msg.getBytes(); DatagramPacket p = new DatagramPacket(b, b.length,netAddr,port); //发送 socket.send(p); System.out.println("发送成功..."); //获取接收文本框的内容,同时加入发送的内容 msg = txtReceMsg.getText() + "\n发给对方的信息:" + msg; txtReceMsg.setText(msg); //清空发送框的内容 txtChatMsg.setText(""); //关闭 socket.close(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (SocketException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } @Override public void run() { //监听是否有信息需要接收 //获取自己端口 int port = Integer.parseInt(txtSelfPort.getText()); byte b[] = new byte[2048]; int len=0; try { //创建UDP套接字(DatagramSocket) socket = new DatagramSocket(port); //接收信息的DatagramPacket对象 DatagramPacket p = new DatagramPacket(b, b.length); while(true) { //接收信息 socket.receive(p); //把接收的数据转换为字符串 len = p.getLength(); String msg = new String(b,0,len); msg = txtReceMsg.getText() + "\n接收对方的信息:" + msg; txtReceMsg.setText(msg); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
报告相同问题?
提交
相关推荐 更多相似问题
- 2017-05-25 02:35回答 9 已采纳 ---------------------------------------------------------------------------java :DemoServletTwo pac
- 2016-12-03 12:49回答 4 已采纳 楼主找到资源了吗?? 这周抽了几个晚上的时间敲了一个,UI界面是看JDK文档写,你可以自己重新编写,只要实现我的View接口就可以了。但解耦还可以,支持单聊、群聊、文件发送。 ----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为
- 2016-04-02 01:46回答 1 已采纳 (1)用户登录主动通知服务器上线,用户注销主动通知服务器下线。服务器客户端定时通讯,服务器轮询检查客户端最后登录时间,在用户意外退出的时候服务器主动让客户端下线。 (2)私聊无非就是发送的信息只有对
- 2017-07-11 08:23回答 3 已采纳 个人观点: 聊天记录存储到库中,至于存多少,记录生命期是多少,什么时候删除等系统设计上考虑下! 如何记录已读未读,这是状态问题!一般CS是双向通信的,而BS可使用轮询模拟双向通信,或者直
- 2020-12-05 21:37小刘同学努力学习的博客 学习完java网络编程这块,就简单写了个socket实现的简易聊天室。 主要是分成一个服务器端和(多个)客户端,其中服务器端只作为一个转发器,将客户端发送的消息发送回客户端,其中封装了一个实现了runnable接口的...
- 2021-06-11 22:07README 编程作业 1 Alessandra Poblador,acp2164 一种。 代码简述 内容:Server.java serverThread.java Client.java clientWriter.java Account.java BlockedIP.java make.sh user_pass.txt 湾开发环境详情 用 ...
- 2018-06-10 00:34基于java socket网络编程实现的简单模拟qq聊天的程序,可实现并发聊天,分为服务器和客户端两个部分
- 2016-12-26 12:59回答 2 已采纳 也是new,只是用接口的话,可以完成如下动作 List list = new ArrayList(); List list2 = new LinkedList(); 其实就是一个理,只要右边是左
- 2017-08-22 08:04回答 2 已采纳 厄,现在上班,你要是要的话,我可以把以前写的飞机大战的源码给你,所谓动起来,也就是不断的根据新的位置,绘制图片
- 回答 4 已采纳 没有办法单独回答如何实现评论回复功能,因为这个功能是一个系统中的一部分。 起码要有评论的对象(用户),评论的目标(一个文章,一个商品或者一个帖子)。 所以建议你找一个完整的源代码,看其中的评论怎么
- 2021-02-26 16:33statch的博客 分享给大家供大家参考,具体如下:这里使用Socket套接字进行编程,完成的是基于TCP可靠服务实现服务器与客户端的双通信。Server服务器端:package com.han;import java.awt.Container;import java.awt.event....
- 2019-11-12 19:55竹鼠商人的博客 用于创建套接字连接这时会向服务器发送上线的 消息,服务器将这个消息处理转发给全部用户 客户端: public void setConnection ( Socket socket ) { this . socket = socket ; try { br = ...
- 2019-06-30 18:17一个简单的P2P即时聊天系统,实现功能如下: 1) 点对点的单人聊天 2) 多人同时聊天 3) 用户可以自由加入和退出。
- 2015-05-09 07:24回答 5 已采纳 简单的聊天室: ``` ===================================================================================
- 2022-02-28 11:27byte字节8位-128~127的博客 前言:在最近一个即将结束的项目中使用到了Socket编程,用于调用另一系统进行处理并返回数据。故把Socket的基础知识总结梳理一遍。 1、TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是...
- 没有解决我的问题, 去提问