java服务器与linux c客户端之间udp通信

来源:互联网 发布:myBatis 打印实际sql 编辑:程序博客网 时间:2024/05/17 15:42

java服务器和 linux c客户端采用udp协议互相通信,最关键的点是数据结构的统一。比如说,在c中一个char型 是8bit,在java中,char 是16bit,所以c和java的char类型不能直接互相转换。在本例程中,c的char 类型和 java的byte类型,两个数据类型都是8bit,这样就保证了数据正确传输的基本条件之一。

java服务器代码如下:

import java.io.*;import java.lang.*;import java.net.*;public class udpserver{    private DatagramSocket server_sock;    private DatagramPacket pac;    private byte recv_buffer[];    private String recv_string;    public udpserver()    {        Init();     }    public void Init()    {        try        {               //监听端口设为1234            server_sock=new DatagramSocket(1234);            recv_buffer=new byte[1024];//接收缓冲区,byte型            pac=new DatagramPacket(recv_buffer,recv_buffer.length);//构造一个packet            recv_string="";                        while(true)//循环接受数据            {                server_sock.receive(pac);//阻塞式接收数据                //将byte[]转化成string               recv_string=new String(recv_buffer,0,pac.getLength());               System.out.println(recv_string);                               }        }        catch(Exception e)        {            e.printStackTrace();        }    }    public static void main(String args[])    {        new udpserver();    }}

linux c客户端代码如下:

#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <unistd.h>int main(int argc, char **argv){        int fd;        //声明一个v4地址结构体,用来保存通信地址等信息        struct sockaddr_in address;                int address_len;        //准备发送的字符串,char型        char line[100] = "Sending string:Client to Server!";                int n;                        //建立套接口                fd = socket(AF_INET, SOCK_DGRAM, 0);//AF_INET和SOCK_DGRAM的组合对应UDP协议                        //连接        //将v4地址结构体清0        bzero(&address, sizeof(address));        //设置各项相关属性        address.sin_family = AF_INET;                address.sin_addr.s_addr = inet_addr("127.0.0.1");                address.sin_port = htons(1234);                address_len = sizeof(address);                        //发送数据                sendto(fd, line, strlen(line)+1, 0,(struct sockaddr *)&address, sizeof(address));         printf("send string success\n");}


程序比较简单仅供参考,java做客户端和c做服务器这种形式与上述代码类似,在此不赘述。需注意的是java中String类型末尾无'\0',与c语言中char[]末尾是'\0'不同,但udp通信时不需要考虑这点仍可通信。
0 0
原创粉丝点击