`

java -> UDP 多线程 的 客户端 和 服务器端

    博客分类:
  • java
 
阅读更多

关闭任务管理器的 javaw 进程 可以 关闭之前 通过JAVA 编译 占用的端口 

 

 

服务器端

package main;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
 
class M1
{
    public static void main(String[]a)
    {
    ChatGui c=new ChatGui();
    }
}
//定义聊天窗口
class ChatGui
{
    private Frame f;
    private TextArea t1;
    private TextArea t2;
    private Button b;
    private Thread th;
    ChatGui()
    {
        info();
    }
    public void info()
    {
 
         reThread();//开启接收线程
 
    }
   
    //线程
    public void reThread()
    {
          try
            {
              DatagramSocket recS=new DatagramSocket(10326);
              new Thread(new Rce(recS)).start();
             // DatagramSocket sendS=new DatagramSocket();
             // new Thread(new Sen(sendS)).start();
             
            }
           catch (Exception w)
             {
        	   throw new RuntimeException("创建线程失败");
             }
    }
 
class Rce implements Runnable
{
    private DatagramSocket ds;
    Rce(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        try
        {
            while(true)
            {
                byte[] b=new byte[1024*64];
                DatagramPacket dp=new DatagramPacket(b,b.length); 
                ds.receive(dp); 
                String ip=dp.getAddress().getHostAddress();
                String data=new String(dp.getData(),0,dp.getLength());
                System.out.println(ip+"-----"+data);
            }
        }
        catch (Exception e)
	    {
	        throw new RuntimeException("接受失败");
	    }
    }
}
}

 

 

客户端

package main;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
 
class M2
{
    public static void main(String[]a)
    {
    ChatGui2 c=new ChatGui2();
    }
}
//定义聊天窗口
class ChatGui2
{
    private Frame f;
    private TextArea t1;
    private TextArea t2;
    private Button b;
    private Thread th;
    ChatGui2()
    {
        info();
    }
    public void info()
    {
         f=new Frame("聊天,不匹配的端口");
         f.setBounds(300,100,500,600);
         f.setResizable(false);
         f.setLayout(new FlowLayout());
         f.setVisible(true);
         t1=new TextArea("",20,60,TextArea.SCROLLBARS_VERTICAL_ONLY);
         t1.setEditable(false);
         t2=new TextArea("",5,50,TextArea.SCROLLBARS_VERTICAL_ONLY);
         b=new Button("发送");
         f.add(t1);
         f.add(t2);
         f.add(b);
         myEvent();
      
 
    }
    public void myEvent()
    {
        f.addWindowListener(new WindowAdapter()
            {
                 public void windowClosing(WindowEvent e)
                   {
                       System.exit(0);
                   }
            });
        b.addActionListener(new ActionListener()
            {
                 public void actionPerformed(ActionEvent e)
                    {
                   seThread();
                   System.out.println(th.getName());//通过测试,这里每次点击发送按钮都会产生新的线程
                    }
            });
 
    }
    //线程
    
    public void seThread()
    {DatagramSocket sendS=null;
    System.out.println("xiancheng");
                          try
                          { 
                               t1.append("我说:"+"\r\n"+t2.getText()+"\r\n");
                             if(sendS==null)
                              sendS=new DatagramSocket();
                             
                               th=new Thread(new Sen(sendS));
                               th.start();  
                               System.out.println(th.isAlive());
                               } 
                               
                          
                          catch (Exception ew)
                           {
                              throw new RuntimeException("xiancheng失败");
                          }
                           
}
 
class Sen implements Runnable
{
    private DatagramSocket ds;
    Sen(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        try
          {
         
         
             byte[] b=t2.getText().getBytes();
             System.out.println(t2.getText());
             System.out.println(b.length);
             DatagramPacket dp=new DatagramPacket(b,b.length,InetAddress.getByName("192.168.1.102"),60002);
             System.out.println(dp.getData());
       
             ds.send(dp);
        
            t2.setText("");
         
          }
        catch (Exception e)
          {
             throw new RuntimeException("发送失败");
          }
    }
}
  
}

 

 

 

分享到:
评论

相关推荐

    UDP简易客户端与服务器端程序(Java)

    在这个Java实现的UDP简易客户端与服务器端程序中,我们可以通过两个核心文件——UDPClient.java和UDPServer.java来理解其工作原理。 首先,让我们来看看`UDPServer.java`。服务器端通常负责监听特定的端口,接收...

    UDP服务器和客户端程序

    6. **多线程/并发处理**:为了处理多个并发连接,服务器端可能需要使用多线程或多进程,每个线程或进程处理一个特定的客户端连接。 7. **性能优化**:由于UDP的无连接性,它通常比TCP更快,但也可能导致更高的数据...

    java udp 多线程实现简单的通信

    总之,这个Java UDP多线程通信项目展示了如何利用Java的网络编程API和多线程技术来构建一个基本的聊天应用。理解这些概念对于开发实时通信系统、物联网应用或其他需要高效、低延迟传输的场景非常重要。

    JAVA_ Socket_UDP(客户端服务器)

    在实际应用中,可能还需要考虑多线程处理多个客户端请求、错误处理、数据编码解码等问题。同时,由于UDP的不可靠性,可能会丢失或重复数据,因此在设计协议时需要考虑到这些特性,并采取相应的补偿措施。 总的来说...

    java实现UDP多客户端连接

    要实现UDP多客户端连接,我们需要创建两个主要的Java类:一个代表服务器端(Server),另一个代表客户端(Client)。以下是关键步骤: 1. **创建服务器端:** - 导入必要的库:`import java.net.DatagramPacket; ...

    javaUDP实现服务器客户端大小写的转换

    此外,为了处理并发请求,服务器端可能需要使用多线程,或者考虑使用`java.nio`包中的非阻塞I/O模型。 在提供的压缩包文件中,应该包含了实现这个功能的Java源代码文件。这些文件可能包括`UDPServer.java`和`UDP...

    java-tcp-udp编程

    Java是世界上最流行的编程语言之一,尤其在服务器端和网络编程领域有着广泛的应用。TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中的两种主要协议,它们各有特点,适应不同的应用场景。本篇文章将深入探讨...

    基于Java Netty 实现的多人联机游戏(多人对战)的客户端和服务器端-gameServer.zip

    在这个项目中,“基于Java Netty 实现的多人联机游戏(多人对战)的客户端和服务器端-gameServer.zip” 提供了一个实际的示例,展示了如何利用Netty构建一个支持多人对战的游戏服务器。下面我们将详细讨论Netty框架...

    netty 包含客户端和服务器端

    这个压缩包包含的是 Netty 的一个实际应用示例,专注于客户端和服务器端的实现。以下是对这个“netty 包含客户端和服务器端”主题的详细解析。 1. **Netty 框架基础**: - Netty 是由 JBoss 提供的开源框架,主要...

    UDP服务器客户端编程实战

    本教程将深入探讨如何进行UDP服务器和客户端的多线程编程实战,实现并发处理多个客户端连接。 首先,我们来了解UDP的基本特性。与TCP(Transmission Control Protocol)不同,UDP不建立连接,不保证数据的顺序和...

    udp多线程传输例子

    在"udp多线程传输例子"中,我们可以预期看到一个利用多线程进行UDP通信的程序示例。通常,这样的程序会包含以下几个关键部分: 1. **套接字创建**:在C++或Java等编程语言中,首先需要创建一个UDP套接字,这通过...

    java多线程局域网聊天,服务器+客户端

    Java多线程局域网聊天应用是利用Java编程语言实现的一种网络通信技术,它通过创建多线程模型来处理并发的客户端请求,使得局域网内的多个用户能够实时地进行交流。这种应用通常包括服务器端和客户端两部分,每部分都...

    socket客户端与服务器端JAVA程序

    UDP客户端和服务器端的基本流程相似,但无需建立连接: 1. 创建`DatagramSocket`实例。 2. 创建`DatagramPacket`,封装要发送的数据和目标地址。 3. 使用`DatagramSocket`发送和接收`DatagramPacket`。 4. 关闭`...

    Socket 通讯客户端和服务器端

    本文将深入探讨客户端和服务器端的Socket通讯原理、实现过程以及相关知识点。 首先,理解Socket的基本概念至关重要。Socket,又称为套接字,是网络编程中的一个接口,为进程间通信(IPC)提供了标准化的方法。在...

    UDP协议客户-服务端字符串转发模型

    5. **多线程或异步处理**:为了处理多个并发连接,服务器端可能需要使用多线程或多进程,或者利用非阻塞I/O和select/poll/epoll等机制。 客户端(kclient.c.txt)的核心知识点包括: 1. **套接字创建与绑定**:虽然...

    Java TCP和 UDP测试代码

    在IT行业中,网络编程是至关重要的一个领域,尤其是在开发服务器端和客户端应用时。Java作为一门广泛使用的编程语言,提供了丰富的API来支持TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)这...

    java-UDP-programming.zip_java programming

    4. **处理多线程**:由于`DatagramSocket`的`receive()`方法是阻塞式的,因此在实现服务器端接收多个客户端请求时,通常会使用多线程。每个新到来的请求可以在一个新的线程中处理,确保不会阻塞其他请求。 5. **...

    实现基于java socket方式:TCP和UDP协议的 小Demo,还实现了基于TCP协议的服务器端多线程方式监听.zip

    在这个小Demo中,我们将深入探讨如何利用Java实现这两种协议的简单应用,以及如何在TCP服务器端使用多线程监听。 首先,TCP(传输控制协议)是一种面向连接的、可靠的协议,它保证了数据的顺序和完整性。在Java中,...

    多线程UDP通讯程序源代码

    本资源提供的"多线程UDP通讯程序源代码"就是一个很好的实践案例,它涉及到计算机网络中的用户数据报协议(UDP)和多线程编程技术。以下是关于这两个关键知识点的详细解释: 1. **用户数据报协议(UDP)**: UDP是...

    Java-UDP-Stop-and-Wait:一个用 Java 编写的 UDP 服务器和客户端来模拟 UDP 停止等待 ARQ

    7. **多线程**:为了提高并发性,服务器端可能需要处理多个同时连接的客户端,这需要多线程编程。 此项目对于理解UDP协议的特性以及如何通过编程实现可靠传输机制具有很高的学习价值。通过这个例子,开发者可以深入...

Global site tag (gtag.js) - Google Analytics