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
相关推荐
7. **网络编程注意事项**: - 错误处理:网络编程中,异常处理和错误检测至关重要,因为网络环境不可预测。 - 数据编码与解码:在不同语言之间通信时,需要确保数据的格式一致,例如字符串编码应统一为UTF-8。 - ...
6. **注意事项** - 文件描述符传递时要注意权限问题,确保C层有足够的权限访问Java层创建的资源。 - 确保Java和C层的同步,避免数据竞争和异常情况。 - 关闭资源时,注意Java和C层都要关闭相应的Socket和内存,...
5. **注意事项**: - 由于此项目可能包含多个部分,包括Android应用、JNI代码、PC端应用以及USB驱动,因此每个部分都可能成为问题的来源。如果程序无法运行,需要逐步调试各个部分。 - 代码示例可能并不完整或适用...
6. **注意事项**: 使用JNI时,需要注意内存管理和线程同步,因为Java和本地代码的内存空间是独立的。此外,由于Android设备的多样性,测试和调试是必不可少的,可能需要针对不同设备进行适配。 7. **学习和实践**...
- **注意事项**:确保数据格式一致,正确处理编码问题。 #### 五、Java Socket 编程进阶技巧 **5.1 Socket 连接池** - **连接池设计**:提高连接复用率,降低资源消耗。 - **实现方案**:使用线程安全的数据结构...
本文将深入探讨Flex中Socket开发的关键知识点,包括如何连接到Java和C++的Server Socket,以及在实际应用中的注意事项。 1. Flex Socket API Flex SDK提供了一个名为`flash.net.Socket`的类,它允许我们创建客户端...
- **内存管理**:堆和栈的区别,手动内存管理的注意事项,内存泄漏问题。 - **C++11及以后的新特性**:如lambda表达式、右值引用、auto关键字等现代C++特性。 - **编译与链接**:理解编译过程,静态库与动态库的...
"TCP_UDP_Socket学习笔记.md" 文件很可能会详细阐述这些概念,包括如何创建和使用Socket对象,如何处理连接和数据传输,以及在实际应用中的注意事项。此外,笔记可能还会包含实例代码,帮助初学者更好地理解和实践...
UDP(User Datagram Protocol)是传输层的一个协议,与...在实际项目中,`udp.doc`文档可能包含更详细的代码示例、注意事项以及特定场景下的最佳实践。学习并理解这些内容将有助于你有效地利用UDP Socket进行网络编程。
* 介绍了 Java 简历的自我评价的重要性,强调了编写简历的注意事项和需求。 * 提供了多个 Java 简历自我评价的范例,展示了不同的写作风格和语言能力。 二、技能概况 * 介绍了 Java 开发者应该具备的技能,包括...
四、注意事项 1. 异步处理:为了提高用户体验,通常会将socket通信放在后台线程进行,避免阻塞UI线程。 2. 连接超时:设置合理的超时值,防止因网络延迟导致的长时间等待。 3. 错误重试:在网络不稳定时,可以考虑...
`zxs.txt`文件可能包含的是关于TCP套接字编程的文本说明,包括概念解释、API使用方法以及注意事项。另一方面,`Client-server socket`文件可能是实际的源代码,演示了如何在客户端和服务器之间建立TCP连接并交换数据...
**注意事项:** - **路径问题:** 在加载so或dll文件时,需要确保这些文件被放置在正确的目录下,否则Java程序将无法找到它们。 - **性能开销:** 尽管JNI可以提高某些任务的性能,但在频繁调用本地方法时可能会导致...
本教程将围绕“ClientSocket”展开,帮助你理解如何在Java或C++等编程语言中实现简单的Socket通信,以及它在即时通讯技术中的应用。 **一、Socket基础** Socket起源于Berkeley的Unix系统,因此也被称为Berkeley ...
**使用互斥锁的注意事项:** 使用锁时需要注意死锁和活锁等问题。 #### 十五、标准I/O流与文件 **对文件的操作:** Java提供了File类和各种InputStream/OutputStream类来操作文件。 **处理跨平台性:** Java...
在实际应用中,TCP文件传输可能会涉及以下优化和注意事项: - 使用缓冲区优化:批量读写数据,减少系统调用次数。 - 阻塞与非阻塞模式:根据需求选择合适的I/O模式。 - 错误恢复:通过设置超时、重试机制来应对网络...
使用必读.html`,将为你提供更详细的学习指导和注意事项。在学习过程中,如果需要更多资源,可以访问`!下载更多相关资源-520下载【520XiaZai.COM】.url`所提供的链接。祝你在Java学习之路上顺利前行!