`

C++ java socket通讯注意事项

 
阅读更多

 

 

 

2: 近几天看到csdn上问c/c++和java通信的问题比较多,特别是c特有的数据结构(如struct)。 

特地根据网友的一个问题举个例子,希望对初学者有所帮助。 

原问题见:http://community.csdn.net/Expert/topic/3886/3886989.xml?temp=.3527033 

这类问题通常是为了利用原有Server或者Server不能做修改(通常是c/c++)造成。 

比如Server端只接收一个结构Employee,定义如下: 

struct UserInfo { 
char UserName[20]; 
int UserId; 
}; 
struct Employee { 
UserInfo user; 
float salary; 
}; 
当然也可以定义为 

struct Employee { 
char name[20]; 
int id; 
float salary; 
}; 


java client 测试源码(为说明问题,假设struct字节对齐,sizeof(Employee)=28) 

import java.net.*; 

/** 
* 与C语言通信(java做Client,c/c++做Server,传送一个结构) 
* @author kingfish 
* @version 1.0 
*/ 
class Employee { 
private byte[] buf = new byte[28]; //为说明问题,定死大小,事件中可以灵活处理 

/** 
* 将int转为低字节在前,高字节在后的byte数组 
*/ 
private static byte[] toLH(int n) { 
byte[] b = new byte[4]; 
b[0] = (byte) (n & 0xff); 
b[1] = (byte) (n >> 8 & 0xff); 
b[2] = (byte) (n >> 16 & 0xff); 
b[3] = (byte) (n >> 24 & 0xff); 
return b; 


/** 
* 将float转为低字节在前,高字节在后的byte数组 
*/ 
private static byte[] toLH(float f) { 
return toLH(Float.floatToRawIntBits(f)); 


/** 
* 构造并转换 
*/ 
public Employee(String name, int id, float salary) { 
byte[] temp = name.getBytes(); 
System.arraycopy(temp, 0, buf, 0, temp.length); 

temp = toLH(id); 
System.arraycopy(temp, 0, buf, 20, temp.length); 

temp = toLH(salary); 
System.arraycopy(temp, 0, buf, 24, temp.length); 


/** 
* 返回要发送的数组 
*/ 
public byte[] getBuf() { 
return buf; 


/** 
* 发送测试 
*/ 
public static void main(String[] args) { 
try { 
Socket sock = new Socket("127.0.0.1", 8888); 
sock.getOutputStream().write(new Employee("kingfish", 123456789, 8888.99f). 
getBuf()); 
sock.close(); 

catch (Exception e) { 
e.printStackTrace(); 


} //end 

分享到:
评论

相关推荐

    C++写的服务器与Java写的客户端通过Socket通信C++代码

    7. **网络编程注意事项**: - 错误处理:网络编程中,异常处理和错误检测至关重要,因为网络环境不可预测。 - 数据编码与解码:在不同语言之间通信时,需要确保数据的格式一致,例如字符串编码应统一为UTF-8。 - ...

    android中java和C的socket通信demo

    6. **注意事项** - 文件描述符传递时要注意权限问题,确保C层有足够的权限访问Java层创建的资源。 - 确保Java和C层的同步,避免数据竞争和异常情况。 - 关闭资源时,注意Java和C层都要关闭相应的Socket和内存,...

    安卓串口Socket通讯USB驱动jni相关-PC与Android设备通过USB建立通信连接通过socket收发数据.rar

    5. **注意事项**: - 由于此项目可能包含多个部分,包括Android应用、JNI代码、PC端应用以及USB驱动,因此每个部分都可能成为问题的来源。如果程序无法运行,需要逐步调试各个部分。 - 代码示例可能并不完整或适用...

    安卓串口Socket通讯USB驱动jni相关-调用jni的简单例子.rar

    6. **注意事项**: 使用JNI时,需要注意内存管理和线程同步,因为Java和本地代码的内存空间是独立的。此外,由于Android设备的多样性,测试和调试是必不可少的,可能需要针对不同设备进行适配。 7. **学习和实践**...

    Socket编程 目录连接.doc

    - **注意事项**:确保数据格式一致,正确处理编码问题。 #### 五、Java Socket 编程进阶技巧 **5.1 Socket 连接池** - **连接池设计**:提高连接复用率,降低资源消耗。 - **实现方案**:使用线程安全的数据结构...

    flex socket开发总结

    本文将深入探讨Flex中Socket开发的关键知识点,包括如何连接到Java和C++的Server Socket,以及在实际应用中的注意事项。 1. Flex Socket API Flex SDK提供了一个名为`flash.net.Socket`的类,它允许我们创建客户端...

    java、c\c++面试题目

    - **内存管理**:堆和栈的区别,手动内存管理的注意事项,内存泄漏问题。 - **C++11及以后的新特性**:如lambda表达式、右值引用、auto关键字等现代C++特性。 - **编译与链接**:理解编译过程,静态库与动态库的...

    Socket网络编程学习笔记.zip

    "TCP_UDP_Socket学习笔记.md" 文件很可能会详细阐述这些概念,包括如何创建和使用Socket对象,如何处理连接和数据传输,以及在实际应用中的注意事项。此外,笔记可能还会包含实例代码,帮助初学者更好地理解和实践...

    socket--udp.rar_UDP_UDP socket_UDP 并发_socket udp

    UDP(User Datagram Protocol)是传输层的一个协议,与...在实际项目中,`udp.doc`文档可能包含更详细的代码示例、注意事项以及特定场景下的最佳实践。学习并理解这些内容将有助于你有效地利用UDP Socket进行网络编程。

    2022年java简历的自我评价.docx

    * 介绍了 Java 简历的自我评价的重要性,强调了编写简历的注意事项和需求。 * 提供了多个 Java 简历自我评价的范例,展示了不同的写作风格和语言能力。 二、技能概况 * 介绍了 Java 开发者应该具备的技能,包括...

    MTK连接socket的源代码

    四、注意事项 1. 异步处理:为了提高用户体验,通常会将socket通信放在后台线程进行,避免阻塞UI线程。 2. 连接超时:设置合理的超时值,防止因网络延迟导致的长时间等待。 3. 错误重试:在网络不稳定时,可以考虑...

    Client-server_socket.rar_socket

    `zxs.txt`文件可能包含的是关于TCP套接字编程的文本说明,包括概念解释、API使用方法以及注意事项。另一方面,`Client-server socket`文件可能是实际的源代码,演示了如何在客户端和服务器之间建立TCP连接并交换数据...

    JAVA基础知识点

    **注意事项:** - **路径问题:** 在加载so或dll文件时,需要确保这些文件被放置在正确的目录下,否则Java程序将无法找到它们。 - **性能开销:** 尽管JNI可以提高某些任务的性能,但在频繁调用本地方法时可能会导致...

    ClientSocket

    本教程将围绕“ClientSocket”展开,帮助你理解如何在Java或C++等编程语言中实现简单的Socket通信,以及它在即时通讯技术中的应用。 **一、Socket基础** Socket起源于Berkeley的Unix系统,因此也被称为Berkeley ...

    CoreJava学习笔记

    **使用互斥锁的注意事项:** 使用锁时需要注意死锁和活锁等问题。 #### 十五、标准I/O流与文件 **对文件的操作:** Java提供了File类和各种InputStream/OutputStream类来操作文件。 **处理跨平台性:** Java...

    TCP通讯发送文件,发送端和接受端源码

    在实际应用中,TCP文件传输可能会涉及以下优化和注意事项: - 使用缓冲区优化:批量读写数据,减少系统调用次数。 - 阻塞与非阻塞模式:根据需求选择合适的I/O模式。 - 错误恢复:通过设置超时、重试机制来应对网络...

    Java简明入门教程

    使用必读.html`,将为你提供更详细的学习指导和注意事项。在学习过程中,如果需要更多资源,可以访问`!下载更多相关资源-520下载【520XiaZai.COM】.url`所提供的链接。祝你在Java学习之路上顺利前行!

Global site tag (gtag.js) - Google Analytics