用udp方式進行聊天的java實現. (轉)

worldblog發表於2007-12-11
用udp方式進行聊天的java實現. (轉)[@more@]

 

我最近也在研究用實現oicq。
這是我的客戶端的簡單實現。
主要是透過udp方式,實現間的對話。
其中運用了序列化類的方法。
以下是,請多提意見。

//傳送訊息類
Message.java

import java.io.Serializable;

public class Message implements Serializable{

  private String msg;
  private String id;
  private String destid;

  public Message(String msg, String id, String destid) {
  this.msg = msg;
  this.id = id;
  this.destid = destid;
  }
 
  //獲得訊息內容
  public String getMessage() {
  return msg;
  }
 
  //獲得傳送方的ip
  public String getID() {
  return id;
  }
 
  //獲得接受方的ip
  public String getDestID() {
  return destid;
  }
  }

 

//接受方
Receiver.java
import java.*;
import java.io.*;

public class Receiver extends Thread {
 
  private Message msg;
  private DatagramPacket packet;
  private DatagramSocket socket;
  private byte[] recvBuf = new byte[500];
 
  public Receiver() {
  try{
  //建立udp包以接受資料。
  packet = new DatagramPacke(recvBuf,recvBuf.length);
 
  //建立接受方的udp埠以接收資料
  socket = new DatagramSocket(7002);
  }
  catch(Exception e){} 
  }

  public void run() {
  try {
  while(true){
  //接受資料
  socket.receive(packet);

  ByteArrayInputStream byteStream = new
  ByteArrayInputStream(recvBuf);
  InputStream is = new ObjectInputStream(new 
  BufferedInputStream(byteStram));
  Object o = is.readObject();
  msg = (Message)o;
  is.close();

  System.out.println(msg.getMessage());
  }
  }
  catch(Throwable t) {
  t.printStackTrace();
  }
  }
}


//傳送方
Sender.java
import java.net.*;
import java.io.*;

public class Sender extends Thread {

private Message msg;
  private DatagramSocket socket;
  private DatagramPacket packet;
 
  public Sender(Message msg) {
  try {
  this.msg = msg;
  //獲得目的方的
  String destID = msg.getDestID();
 
  //獲得將要傳送的訊息內容
  String destID = msg.getDestIDString message = msg.getMessage();
 
  ByteArrayOutputStream byteStream = new ByteArrayOutputStream(500);
  ObjectOutputStream = new ObjectOutputStream(new
  BufferedOutputStream(byteStream));
  os.writeObject(msg);
  os.flush();
  byte[] senuf = byteStream.toByteArray();
 
 //建立udp資料包以傳送資料
  packet = new  DatagramPacket(sendBuf,sendBuf.length,
 Address.getByName(destID),7002);
  //建立傳送udp套接字,指定套接字口。
  socket = new DatagramSocket(7000);
  os.close();
  }
  catch(Throwable t) {
  t.printStackTrace();
  }
  }

  public void run() {
  try {
  //傳送訊息
  socket.send(packet);
  //傳送完畢關閉套接字。
  socket.close();
  }
  catch(Throwable t) {
  t.printStackTrace();
  }
  }
}


//測試
Udp_Chat.java
import java.io.*;
import java.net.*;

public class UDP_Chat {
 
  public UDP_Chat(String s){
  }

public static void main(String args[])throws Exception{
  Message a = new Message("阿飛的卡","211.92.155.200" ,"211.92.155.200");
  new Sender(a).start();
  new Receiver().start(); 
  }
}

參考文章:Java 技巧 40:透過資料包包輸送 利用資料包包在網上輸送 Java 物件
bootcool@263.net


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991337/,如需轉載,請註明出處,否則將追究法律責任。

相關文章