一个简单的JAVA网络通信 UDP 单工方式

来源:互联网 发布:关系数据库种类 编辑:程序博客网 时间:2024/05/22 10:22

本实例实现的是本机的两个进程通信。

发送端:

package Sender;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Sender {
public void sender() throws IOException{
 InetAddress recieverHost=InetAddress.getByName("localhost"); //接收端为本机的一个进程
 int reciecerPort=57834;//监听端口
 String message="hello world";  //发送的信息
 DatagramSocket mysoSocket=new DatagramSocket(); //创建客户端socket
 byte[] buffer=message.getBytes();  //将发送的字符串进行平台编码
 DatagramPacket datagram=new DatagramPacket(buffer, buffer.length,recieverHost,reciecerPort); //创建数据包
 
 mysoSocket.send(datagram);  //把该数据包发送到指定的套接字
 mysoSocket.close(); //关闭
}

}

 

接收端:

package Reciever;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Reciever {
public void reciever() throws IOException{
 final int MAX_LENGTH=10;  //接收端能够接收的最大数据包长度
 int port=57834; //将要绑定的端口
 try{
  DatagramSocket mySocket=new DatagramSocket(port);  //创建接收端socket,并绑定到固定的端口


  byte[] buffer=new byte[MAX_LENGTH]; //接受缓存 
  DatagramPacket datagram=new DatagramPacket(buffer, MAX_LENGTH); //创建接收端的数据包用来接收发送端发来的数据包
  
  mySocket.receive(datagram);  //监听端口
  
  String message=new String(buffer);//取出接收到的数据
  
  System.out.println(message);
  
  mySocket.close();
 }catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
 }
 
}
}

 

控制端:

package Message_Socket;

import java.io.IOException;

import Reciever.Reciever;
import Sender.Sender;

public class SocketTest {
public static void main(String[] args) throws IOException{
 Reciever reciever=new Reciever();
 reciever.reciever();
 Sender sender=new Sender();
 sender.sender();
}
}

 

注意点:

1.如果运行时出现如下编译错误:

Unrecognized Windows Sockets error: 0: Cannot bind

(1)很可能是你使用的监听端口已被其他的进程使用,请选择其他端口,不能是知名端口(1-1024),还可以在DOS下查看是哪个进程使用了该接口,具体命令上网上查;

(2)将接收端的socket的创建及接受放在try-catch中;

2.接收端在运行recieve之后将被阻塞,即被挂起,直到有数据发送过来。

3.如果发送端发送的数据大小超过了接收端的缓存大小,那么超出的数据将被丢失。

原创粉丝点击