`
shishui5271314
  • 浏览: 9386 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

UDP协议局域网聊天

阅读更多

 

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TCPTalk extends JFrame implements ActionListener{
     public static void main(String[] args){
           new TCPTalk();
      }

      JLabel jl_state,jl_purpose,jl_receive,jl_name;
      JTextField jt_state,jt_purpose,jt_name,jt_sendmeg;
      JButton jb_connection,jb_uncon,jb_sendmeg;
      JTextArea textArea;
      JRadioButton ServerRadio,ClientRadio;
      JPanel jp1,jp2,jp3,jp4;
      JScrollPane megJScrollPane;
      String meg;
      TCP_server t1;
      TCP_client t2;
      ServerSocket serversocket;
      Socket Ssocket,Csocket;
      BufferedReader in1;
      PrintWriter out1;
      public TCPTalk(){
           super("TCP聊天");
           Container cont=getContentPane();
           cont.setLayout(null);
           ButtonGroup bg = new ButtonGroup();
           ServerRadio = new JRadioButton("服务器",true);
           ServerRadio.setSize(80,20);
           ServerRadio.setFont(new Font("宋体",Font.BOLD,14));
           ServerRadio.setLocation(10,20);
           bg.add(ServerRadio);
           cont.add(ServerRadio);
           ClientRadio = new JRadioButton("客户端",false);
           ClientRadio.setSize(80,20);
           ClientRadio.setFont(new Font("宋体",Font.BOLD,14));
           ClientRadio.setLocation(100,20);
           cont.add(ClientRadio);
           bg.add(ClientRadio);
           jl_state=new JLabel("连接状态");
           jl_state.setSize(100,20);
           jl_state.setFont(new Font("宋体",Font.BOLD,14));
           jl_state.setLocation(190,20);
           cont.add(jl_state);
           jt_state = new JTextField("离线");
           jt_state.setBackground(Color.gray);
           jt_state.setSize(100,20);
           jt_state.setFont(new Font("宋体",Font.PLAIN,14));
           jt_state.setLocation(320,20);
           cont.add(jt_state);
 
           jl_purpose=new JLabel("连接主机IP");
           jl_purpose.setSize(100,20);
           jl_purpose.setFont(new Font("宋体",Font.BOLD,14));
           jl_purpose.setLocation(10,50);
           cont.add(jl_purpose);
           jt_purpose=new JTextField("127.0.0.1");
           jt_purpose.setForeground(Color.orange);
           jt_purpose.setSize(250,20);
           jt_purpose.setLocation(120,50);
           cont.add(jt_purpose);
           jb_connection=new JButton("连接");
           jb_connection.setSize(100,20);
           jb_connection.setFont(new Font("宋体",Font.BOLD,14));
           jb_connection.setLocation(380,50);
           cont.add(jb_connection);
           jb_connection.addActionListener(this);
 
           jl_receive=new JLabel("接受到的信息");
           jl_receive.setSize(100,20);
           jl_receive.setFont(new Font("宋体",Font.BOLD,14));
           jl_receive.setLocation(10,80);
           cont.add(jl_receive);
           textArea = new JTextArea();
           textArea.setForeground(Color.red);
           textArea.setLineWrap(true);
           textArea.setSize(250,200);
           textArea.setFont(new Font("宋体",Font.BOLD,12));
           megJScrollPane = new JScrollPane(textArea);
           megJScrollPane.setSize(250,200);
           megJScrollPane.setLocation(120,80);
           cont.add(megJScrollPane);
           jb_uncon=new JButton("结束连接");
           jb_uncon.setSize(100,20);
           jb_uncon.setFont(new Font("宋体",Font.BOLD,14));
           jb_uncon.setLocation(380,80);
           cont.add(jb_uncon);
           jb_uncon.addActionListener(this);
           jl_name=new JLabel("你的昵称");
           jl_name.setSize(100,20);
           jl_name.setFont(new Font("宋体",Font.BOLD,14));
           jl_name.setLocation(10,260);
           cont.add(jl_name);
 
           jt_name=new JTextField();
           jt_name.setSize(100,20);
           jt_name.setFont(new Font("宋体",Font.BOLD,14));
           jt_name.setLocation(10,300);
           cont.add(jt_name);
           jt_sendmeg=new JTextField();
           jt_sendmeg.setSize(250,20);
           jt_sendmeg.setFont(new Font("楷体",Font.BOLD,14));
           jt_sendmeg.setLocation(120,300);
           cont.add(jt_sendmeg);
           jb_sendmeg=new JButton("发送信息");
           jb_sendmeg.setSize(100,20);
           jb_sendmeg.setFont(new Font("楷体",Font.BOLD,14));
           jb_sendmeg.setLocation(380,300);
           cont.add(jb_sendmeg);
           jb_sendmeg.addActionListener(this);
 
           t1=new TCP_server();
           t2=new TCP_client();
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setSize(500, 400);
           setVisible(true);
           setResizable(false);
 }
           public void actionPerformed(ActionEvent e){
                     if(e.getSource()==jb_connection)//判断是否按下连接按钮
                          {
                              if(ServerRadio.isSelected()==true)//判断是否选为服务器端
                               {
                                    meg= "";
                                    jt_sendmeg.setText("");
                                    t1.start();
                               }else{
                                    meg= "";
                                    jt_sendmeg.setText("");
                                    t2.start();
                               }
                          }
                     if(e.getSource()==jb_sendmeg)
                     {
                               out1.write(jt_name.getText()+"说:"+jt_sendmeg.getText()+"\n");
                               textArea.append("我说:"+jt_sendmeg.getText()+"\n");
                               out1.flush();
                               jt_sendmeg.setText("");
 
                     }
                     if(e.getSource()==jb_uncon)
                     {
                          try{
                               if(ServerRadio.isSelected()==true){
                                    Ssocket.close();
                                    serversocket.close();
                                    jt_state.setText("离线");
                                    jt_state.setBackground(Color.gray);
                                    jb_sendmeg.setEnabled(false);
                                    jb_uncon.setEnabled(false);
                                    jb_connection.setEnabled(true);
                               }else{
                                    Csocket.close();
                                    jt_state.setText("离线");
                                    jt_state.setBackground(Color.gray);
                                    jb_sendmeg.setEnabled(false);
                                    jb_uncon.setEnabled(false);
                                    jb_connection.setEnabled(true);
                               }
                          }catch(IOException e2)
                          {
                               jt_state.setText("发生错误!");
                           }
                     }
           }
           class TCP_server extends Thread{
                     public TCP_server(){
 
                     }
                     public void run()
                     {
                          try{
                                    jb_connection.setEnabled(false);
                                    jb_uncon.setEnabled(true);
                                    jt_state.setText("等待连接...");
                                    jt_purpose.setText(InetAddress.getLocalHost().getHostAddress());
                                    serversocket=new ServerSocket(8000);
                                    Ssocket=serversocket.accept();
                                    in1=new BufferedReader(new InputStreamReader(Ssocket.getInputStream()));
                                    out1=new PrintWriter(Ssocket.getOutputStream(),true);
                                    while(true){
                                              if(Ssocket.isBound()==true){ 
                                                        jt_state.setText("通话中...");
                                                        jt_state.setBackground(Color.green);
                                                        jb_uncon.setEnabled(true);
                                                        jb_sendmeg.setEnabled(true);
                                                        break;
                                              }
                                    }
                                    while(true)
                                    {
                                         meg=in1.readLine();
                                         if(meg.length()>0)
                                         {
                                              textArea.append(meg);
                                              textArea.append("\n");
                                         }
                                    }
 
                               }catch(IOException e){}
 
                         }
           }
           class TCP_client extends Thread{
                     public TCP_client(){
 
                     }
                     public void run()
                     {
                          try{
                                    jb_connection.setEnabled(false);
                                    jt_state.setText("等待连接...");
                                    Csocket=new Socket();
                                    Csocket.connect(new InetSocketAddress(jt_purpose.getText(),8000),5000);
                                    in1= new BufferedReader(new InputStreamReader(Csocket.getInputStream()));
                                    out1=new PrintWriter(Csocket.getOutputStream(),true);
                                    while(true){
                                              if(Csocket.isConnected()==true){
                                                   jt_state.setText("通话中...");
                                                   jt_state.setBackground(Color.green);
                                                   jb_uncon.setEnabled(true);
                                                   jb_sendmeg.setEnabled(true);
                                                   break;
                                              }
                                    }
 
                                    meg= "";
                                    while(Csocket.isConnected()==true){
                                              meg=in1.readLine();
                                              if(meg.length()>0){
                                                        textArea.append(meg);
                                                        textArea.append("\n");
                                    }
                               }
                          }catch(IOException e){
                               jt_state.setText("无法连接到指定服务器!");
                          }
                     } 
                 }
          }
 
 
分享到:
评论

相关推荐

    使用c#编写的UDP协议局域网聊天软件,实现个人聊天,群聊,发送文件和文件夹功能

    标题中的“使用C#编写的UDP协议局域网聊天软件”揭示了该程序的核心技术和应用场景。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它以较小的开销提供快速的数据传输,适合实时性要求高的应用...

    基于UDP的局域网聊天程序

    本项目是一个基于UDP协议实现的局域网聊天程序,它由服务端和客户端两部分组成,使用C++编程语言,并结合了Microsoft Foundation Class (MFC)库来构建图形用户界面。 【描述】:“用C++写的一个局域网聊天程序,...

    基于UDP协议的局域网聊天工具

    【标题】:“基于UDP协议的局域网聊天工具”指的是一个设计用于在局域网内实现用户间通信的应用程序,该应用是通过用户数据报协议(UDP)来传输数据的。UDP是一种无连接的、不可靠的传输层协议,与TCP(传输控制协议...

    基于UDP协议的聊天工具

    【基于UDP协议的聊天工具】是一款使用C#编程语言实现的通信软件,它利用了用户数据报协议(UDP)来实现实时的数据传输。UDP是一种无连接的、不可靠的传输协议,它在互联网协议栈中位于传输层,相较于TCP协议,它的...

    基于udp的局域网聊天(代码,报告)

    1. **UDP协议基础**:UDP不提供像TCP那样的连接建立与释放,也不保证数据包的顺序、可靠性和错误检测。它将数据包直接发送到网络上,每个数据包称为一个用户数据报。这意味着开发者需要自己处理数据的排序和错误检查...

    C#基于UDP协议局域网简单聊天工具

    在本文中,我们将深入探讨如何使用C#编程语言构建一个基于UDP协议的局域网简单聊天工具。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,常用于实时数据传输,如在线游戏、视频会议等,因为它提供...

    基于P2P UDP的局域网聊天工具源码

    【标题】"基于P2P UDP的局域网聊天工具源码" 描述了一款使用P2P(点对点)技术并通过UDP(用户数据报协议)进行通信的局域网聊天工具。这款源码提供了深入理解P2P网络和UDP通信在实际应用中的机会,适合开发者学习和...

    C#基于UDP的局域网聊天程序

    【标题】"C#基于UDP的局域网聊天程序"是一个使用C#编程语言实现的、基于用户数据报协议(UDP)的局域网通信工具。UDP是一种无连接的、不可靠的传输协议,常用于实时数据传输如语音、视频等,因为它提供了较低的延迟...

    基于UDP协议的局域网聊天程序

    基于UDP协议的局域网聊天程序。vc++6.0编写。点对点模式。运行程序后输入对方机器IP地址,即可进行聊天。单台计算机可以测试。测试Ip:127.0.0.1(大家应该都知道)

    基于UDP局域网聊天软件的设计与实现

    本项目“基于UDP局域网聊天软件的设计与实现”就是利用UDP协议来构建一个简单的即时通信系统,允许在同一局域网内的设备之间进行快速的信息交流。 【描述】:“采用udp协议 实现局域网聊天 有源代码。即时通信。...

    C2风格 UDP 的局域网聊天程序C++版

    且必须按提示输入信息),本程序基于UDP协议,并且利用多线程编程实现了程序的背景音乐(系统的Beep声音必须打开才能听见)以及正常退出功能(点右上角的“差”是非正常退出!),当初设计的时候使得两个Client端口...

    基于udp协议的局域网的端端聊天程序

    【标题】:“基于UDP协议的局域网端到端聊天程序” 这个项目是关于实现一个简单的局域网内的文本聊天程序,它利用了无连接的用户数据报协议(UDP)来传输信息。UDP是一种在网络应用中广泛使用的传输层协议,与TCP...

    C# 用UDP协议开发的局域网聊天程序

    标题"用C# UDP协议开发的局域网聊天程序"指的是一个基于C#编程语言,利用用户数据报协议(UDP)来实现的局域网内的即时通讯应用。UDP是一种无连接的传输层协议,常用于对实时性要求较高的应用场景,如在线游戏、视频...

    Udp局域网聊天简单程序

    在本文中,我们将深入探讨如何构建一个简单的基于UDP的局域网聊天程序,以及涉及的相关知识点。 首先,UDP的特点是轻量级和高效。它不提供诸如流量控制、拥塞控制或连接建立等服务,这使得它非常适合于实时应用,如...

    基于Kotlin 实现的TCP与UDP的局域网聊天安卓APP,支持聊天和收发文件

    【作品名称】:基于Kotlin 实现的TCP与UDP的局域网聊天安卓APP,支持聊天和收发文件 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 ...

    基于UDP的简单局域网聊天室框架

    首先,我们要理解UDP协议。UDP是一种无连接的、不可靠的传输层协议,它不保证数据包的顺序、完整性和可靠性,而是以尽可能快的速度发送数据。在局域网聊天室中,由于数据传输速度要求高且对数据丢失容忍度较高,UDP...

    基于udp的局域网聊天及文件传输程序

    通过这个项目,开发者不仅可以学习到MFC的基本用法,还能深入理解网络编程,尤其是UDP协议的应用和问题解决。对于初学者来说,这是一个很好的实践项目,可以帮助他们在理论与实践中找到平衡,提升技能。对于存在的...

    基于UDP的局域网聊天程序(相对完整)

    这是一个基于UDP协议实现的局域网聊天程序,它利用了Windows SDK中的Socket接口进行网络通信。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它相较于TCP而言,具有更低的延迟和更高的效率,...

    一个基于UDP的局域网聊天室

    1. **UDP协议**:UDP不提供可靠的数据传输服务,没有像TCP那样的拥塞控制、顺序控制和重传机制。因此,开发者需要自己处理数据包丢失、重复或乱序的问题。这使得UDP更适合实时通信,因为它减少了额外的延迟。 2. **...

Global site tag (gtag.js) - Google Analytics