欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Datagram Scoket双向通信

程序员文章站 2024-02-28 15:09:28
这里是两个人进行通信。是根据ip来判断的,xp与xp之间没有问题,我win7和xp有问题(已解决 关闭防火墙,如果是内网 网段要一致) 复制代码 代码如下:import...

这里是两个人进行通信。是根据ip来判断的,xp与xp之间没有问题,我win7和xp有问题(已解决 关闭防火墙,如果是内网 网段要一致)

复制代码 代码如下:

import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.net.datagrampacket;
import java.net.datagramsocket;
import java.net.inetaddress;
import java.net.socketexception;
import java.net.unknownhostexception;

public class me {

 public static void main(string[] args) throws ioexception {
  new recivethread().start();//配置监听程序 必须放在前面

  new sendinfo().main(args);
 }

}

class sendinfo {

 public static void main(string[] args) throws ioexception {

  bufferedreader bf = new bufferedreader(new inputstreamreader(system.in));
  string str = null;
  string lines = "";
  while ((str = bf.readline()) != null) {
   lines += str;
   if (str.equals("ok")) {
    send(lines);
    lines = "";
   }

   if (str.equals("bye")) {
    bf.close(); // 必须加break 否者还会有回车信号 break;
   }

  }

 }

 static void send(string str) {
  // udp网络程序
  datagramsocket ds = null;
  datagrampacket dp = null;
  try {
   ds = new datagramsocket(3000);//打开端口号
  } catch (socketexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
  try {
   byte[] ip = new byte[] { (byte) 10, 1, 1, (byte) 200 };
   dp = new datagrampacket(str.getbytes(), str.length(),
     inetaddress.getbyaddress(ip), 9000);//faso
  } catch (unknownhostexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }

  try {
   ds.send(dp);
   system.out.println("send success");
  } catch (ioexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }

  ds.close();
 }
}
class recivethread extends thread {

 public void run() {
  while (true) {
   datagramsocket ds = null;
   byte[] buf = new byte[1024];
   datagrampacket dp = null;

   try {
    ds = new datagramsocket(9000);//打开端口
   } catch (socketexception e) {
    // todo auto-generated catch block
    e.printstacktrace();
   }
   dp = new datagrampacket(buf, 1024);

   try {
    ds.receive(dp);
   } catch (ioexception e) {
    // todo auto-generated catch block
    e.printstacktrace();
   }

   string str = new string(dp.getdata(), 0, dp.getlength()) + "from"
     + dp.getaddress().gethostaddress() + ":port" + dp.getport();
   system.out.println(str);
   ds.close();

  }
 }
}