`
xfjt297857539
  • 浏览: 153008 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

c和java的udp互通(zhuan)

    博客分类:
  • java
 
阅读更多
突然要用到C和java的Socket互通,以前都只是同一种语言自己通信,菜鸟从没有写过两种语言间的socket通信。今天试了一下,就是一个简单的互通程序,给初学者一个借鉴。欢迎大家拍砖。
如要转载,请注明作者及出处。

   java 和 c用socket互通,最关键的菜鸟认为是数据结构的统一。比如说,在c中一个char型是8bit(一个字节),但是在java中,char 是16bit(两个字节),所以说c的char和java的char是直接不能互相转换的。在菜鸟的程序中,菜鸟用了c的char 和 java的byte型,两个数据类型都是8bit,这样就保证了数据正确传输的基本条件之一。
    菜鸟方便起见,用了udp。c的程序只能在Linux/Unix使用

client:  udpc.c                         server:udpserver.java

执行顺序:开两个终端A,B
1。分别将A,B的路径cd到程序所在目录
2。A中执行 
      #javac udpserver.java
      #java udpserver
这样,java的服务器就启动了
3。B中执行
      #gcc -o udpc udpc.c
      #./udpc
这样,c的客户端就启动了。

最后结果:
server端:
[root@ns c_java_udp]# javac udpserver.java
[root@ns c_java_udp]# java udpserver
Sending string:Client to Server!


client端:
[root@ns c_java_udp]# gcc -o udpc udpc.c
[root@ns c_java_udp]# ./udpc
send string success
[root@ns c_java_udp]#

下面是代码:

server:
========================================================================
///////////////////////////////////////////
//1.#javac udpserver.java
//2.#java udpserver
//////////////////////////////////////////
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();
    }

}
===================================================================


client: udpc.c
===================================================================
///////////////////////////////////////////
//1.#gcc -o udpc udpc.c
//2#./udpc
///////////////////////////////////////////
#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");
}

===========================================================================
玩具程序,希望能对大家有所帮助。
分享到:
评论

相关推荐

    gssdgv-zhuan-ke-master_java_

    蚂蚁集团作为全球知名的金融科技公司,其开源的Java研发框架——gssdgv-zhuan-ke-master_java_,为开发者提供了强大的工具集,旨在提升Spring Boot应用的性能和可扩展性。本文将深入探讨这一框架的核心特性、应用...

    zhuan_java_untilgw8_android_

    标题 "zhuan_java_untilgw8_android_" 暗示了这是一个关于使用Java语言在UntilGW8平台上开发Android游戏的项目,特别是一款简单的打砖块游戏。在这个项目中,我们可以深入学习到Java编程语言、Android应用开发的基础...

    ban-zhuan.zip_JAVA穷举法搬砖_搬砖_用JAVA穷举法

    在给定的“ban-zhuan.zip_JAVA穷举法搬砖”主题中,我们面对的是一个数学问题,该问题与实际的砖块分配有关。36块砖需要36个人来搬运,其中包括男性、女性和小孩,他们各自有不同的搬运能力。男性每次能搬4块砖,...

    java面试题及技巧4

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题目与技巧1

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题以及技巧

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    zhuan 2.zip

    综上所述,"zhuan 2.zip"提供的抽奖程序是一个基于JavaScript的移动端应用,具备良好的交互性和灵活性。通过JSON文件管理奖品,可与服务器接口对接,同时支持预设中奖选项。这个项目对于学习和理解移动端交互设计、...

    c语言实现打砖块

    通过分析这段代码,我们可以学习到如何在C语言中实现复杂的图形界面和交互式游戏功能,这对于理解和掌握C语言的应用具有重要的意义。此外,对于初学者而言,这也是一个很好的实践项目,可以帮助他们将理论知识应用到...

    java面试题及技巧3

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题以及技巧6

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java swing写成的接球小游戏

    Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它是Java AWT(抽象窗口工具包)的扩展,提供了更多的组件和功能。在这个接球小游戏中,开发者利用Swing构建了一个交互式的用户界面,让用户可以通过点击...

    Map_out.rar_Map o_mapgis_mapgis noteo_mapgis zhuan jpg_out

    "Map o_mapgis_mapgis noteo_mapgis zhuan jpg_out"这部分可能是描述了这个压缩包的主要功能或者过程,即MapGIS的二次开发功能,用于将MapGIS的地图数据转换成JPG格式的光栅图像。"o_mapgis_mapgis noteo_mapgis...

    自媒体新媒体软件工具自媒体zhuan钱秘诀资料

    自媒体新媒体软件工具自媒体zhuan钱秘诀资料

    map key and value

    map、 key' 和 value 的 取值 and so on

    List<Long>转一维数组 Long[](csdn)————程序.pdf

    在Java编程中,数据结构之间的转换是常见的操作。在标题和描述中提到的"List转一维数组 Long[]",就是将一个包含Long类型的列表转换为对应的Long数组。这里我们将详细探讨如何进行这种转换,并了解相关的编程概念。 ...

    XUAN-ZHUAN-led.zip_旋转LED_旋转LED 自适应_自适应旋转LED

    压缩包中的"旋转 led.c"文件很可能是实现这些功能的C语言源代码。C语言是一种广泛用于嵌入式系统开发的编程语言,适用于编写对硬件控制要求严格的程序。开发者可能使用它来编写底层驱动和控制逻辑,以实现旋转LED的...

    zhuan-kai-fa

    6. **持续集成/持续部署(CI/CD)**:如Jenkins、Travis CI和CircleCI等工具,自动化构建、测试和部署流程,确保快速且可靠的发布。 7. **设计模式**:是解决常见软件设计问题的经验总结,如单例模式、工厂模式、观察...

    z zhuan sec_EH4_EH4Z文件转SEC文件_

    标题中的"z zhuan sec_EH4_EH4Z文件转SEC文件_"表明我们正在处理一个涉及到将EH4或EH4Z格式的文件转换为SEC格式的议题。这个过程可能涉及到特定的工具、编程语言或者协议,尤其是在嵌入式系统中,这些文件格式通常与...

    java的小程序

    import java.util.Scanner; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.imageio.*; public class Jsq{ public static void main(String [] as){ new JsqFrame(); } } ...

    C语言模拟打砖块程序

    ### C语言模拟打砖块程序解析 #### 一、程序概述 本文将深入解析一个用C语言编写的经典游戏——打砖块程序。...这种类型的项目非常适合初学者实践编程技能,同时也是理解C语言和图形编程基础的一个好例子。

Global site tag (gtag.js) - Google Analytics