A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐僧踏歌 中级黑马   /  2014-4-26 22:03  /  778 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐僧踏歌 于 2014-4-30 20:30 编辑

import java.net.*;
import java.io.*;
public class UDPServer
{
  public static void main(String args[])
  {
    UDPServer frm=new UDPServer();
  }
  String strbuf= " ";
  SerThread st;        //声明服务器类线程对象st
  public UDPServer()
  {
    st=new SerThread();     //创建线程
    st.start();             //启动线程
  }
}
class SerThread extends Thread   //服务器类线程,负责接收信息
{
  public SerThread() {}   //构造方法
  public void run()
{
    String str1;
    try
    {      //使用8000端口,建立UDP Socket对象
      DatagramSocket skt=new DatagramSocket(8000);
      System.out.print("服务器名:");
           //显示服务器计算机的名称
      System.out.println(InetAddress.getLocalHost().getHostName());
      while(true)
      {
        byte inbuf[]=new byte[256];
             //下面是取得服务器端地址
        DatagramPacket pkt;
            //创建并设置接收pkt对象的接收信息
        pkt=new DatagramPacket(inbuf,inbuf.length);
        skt.receive(pkt);  //接收数据报分组
            //提取接收到的分组中的数据并转成字符串
        str1=new String(pkt.getData());
        str1=str1.trim();      //去掉字符串中的首尾空格
        if(str1.length()>0)
        {
          int pot=pkt.getPort();    //获取远程端口号
          System.out.println("远程端口:"+pot);
          System.out.println("服务器已接收到信息:"+str1);
        }
        }
       }
    catch (IOException e) { return;  }
  }
}
提示以下信息。但查了没缺大括号啊
  

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

正序浏览
唐僧踏歌 发表于 2014-4-27 08:45
谢了 经常出现别人那可以运行 我这出错  淡淡的忧伤啊

恩呢 我也是偶尔碰到,有人提示重新开一次程序 ,再重开一个文档,结果ok了。
回复 使用道具 举报
看不到你的提示信息,我估计楼主的错误可能是运行了多次程序,然后提示端口被占用,如果是这样的话,只需把以前运行的进程在控制台关上就行了

下面是一个UDP多线程的聊天程序,楼主可以试着看一下
  1. package cn.itcast.net.udp.chat;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;
  8. import java.net.SocketException;

  9. public class ChatTest {

  10.         /**
  11.          * @param args
  12.          * @throws IOException
  13.          */
  14.         public static void main(String[] args) throws IOException {

  15.                 //创建socket服务。
  16.                 //发送端。
  17.                 DatagramSocket send = new DatagramSocket(8888);
  18.                 DatagramSocket rece = new DatagramSocket(11098);
  19.                
  20.                 new Thread(new Send(send)).start();
  21.                 new Thread(new Rece(rece)).start();
  22.                
  23.         }

  24. }

  25. // 负责发送的任务,通过UDPsocket发送。
  26. class Send implements Runnable {
  27.         // 任务对象一建立,需要socket对象。
  28.         private DatagramSocket ds;

  29.         public Send(DatagramSocket ds) {
  30.                 super();
  31.                 this.ds = ds;
  32.         }

  33.         @Override
  34.         public void run() {

  35.                 // 具体的发送数据的任务内容。
  36.                 // 1,要发送的数据来自哪里?键盘录入。
  37.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(
  38.                                 System.in));

  39.                 // 1.1读取数据。
  40.                 String line = null;
  41.                 try {
  42.                         while ((line = bufr.readLine()) != null) {

  43.                                 // 1.2 将数据变成字节数组。封装到数据到。
  44.                                 // 2,将数据封装到数据包中。
  45.                                 byte[] buf = line.getBytes();
  46.                                 DatagramPacket dp = new DatagramPacket(buf, buf.length,
  47.                                                 InetAddress.getByName("172.17.7.100"), 11098);

  48.                                 // 3,将数据包发送出去。
  49.                                 ds.send(dp);
  50.                                 if ("over".equals(line)) {
  51.                                         break;
  52.                                 }

  53.                         }

  54.                         ds.close();
  55.                 } catch (IOException e) {

  56.                         e.printStackTrace();
  57.                 }

  58.         }

  59. }

  60. // 负责接收的任务
  61. class Rece implements Runnable {

  62.         private DatagramSocket ds;

  63.         public Rece(DatagramSocket ds) {
  64.                 super();
  65.                 this.ds = ds;
  66.         }

  67.         @Override
  68.         public void run() {
  69.                 while (true) {
  70.                         // 接收的具体的任务内容。
  71.                         // 1,因为接收的数据最终都会存储到数据包中。而数据包中必须有字节数组。
  72.                         byte[] buf = new byte[1024];

  73.                         // 2,创建数据包对象。
  74.                         DatagramPacket dp = new DatagramPacket(buf, buf.length);

  75.                         // 3,将收到的数据存储到数据包中。
  76.                         try {
  77.                                 ds.receive(dp);
  78.                         } catch (IOException e) {

  79.                                 e.printStackTrace();
  80.                         }

  81.                         // 4,获取数据。
  82.                         String ip = dp.getAddress().getHostAddress();

  83.                         String data = new String(dp.getData(), 0, dp.getLength());
  84.                         System.out.println(ip + ":" + data);
  85.                         if("over".equals(data)){
  86.                                 System.out.println(ip+".....离开聊天室");
  87.                         }

  88.                 }

  89.         }

  90. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
水竹 发表于 2014-4-27 07:00
看不到你的提示信息,是图片吧?一直在刷新。
不过我运行了一下你的程序,正常运行啊,没发现哪里不对。 ...

谢了 经常出现别人那可以运行 我这出错  淡淡的忧伤啊
回复 使用道具 举报
看不到你的提示信息,是图片吧?一直在刷新。
不过我运行了一下你的程序,正常运行啊,没发现哪里不对。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马