Java C++ Socket 的问题
悬赏分:25 - 提问时间2009-9-27 16:39
我想用C++作为服务器端,java作为客户端用Socket进行互联传输文件。虽然功能是实现了,但不知道为什么速度非常慢(传输一张800K的图片要2分钟O__O"…),请教大家有没有什么方法能加快一点速度的呢?
这是我的主要代码:
C++:
void Server::recvFile()
{
ofstream outs("C://tempC.bmp", ios::out | ios::binary);
while (true)
{
char buffer[50000];
char aWord;
char bWord[100];
int i;
bool eofile = false;
for (i=0; i<50000; i++)
{
recv(sockConn, &aWord, 1, 0);
if (aWord == '\n')
break;
buffer[i] = aWord;
if (aWord == 'e')
{
eofile = true;
break;
}
}
if (!eofile)
{
char aTemp[5];
for (int m=0; m<5; m++)
aTemp[m] = 0;
int count = 0;
int tempInt;
for (int j=0; j<i; j++)
{
if (buffer[j] == ' ')
{
stringstream ss(aTemp);
ss >> tempInt;
count = 0;
for (m=0; m<10; m++)
aTemp[m] = 0;
BYTE tempByte = (BYTE)tempInt;
outs.write((char*)&tempByte, sizeof(BYTE));
}
else
{
aTemp[count] = buffer[j];
count++;
}
}
}
else
break;
}
}
Java:
InputStream in = null;
OutputStream out = null;
DataOutputStream writeToSocket = null;
DataInputStream readFromSocket = null;
try {
Socket socket = new Socket("localhost", 2000);
writeToSocket = new DataOutputStream(socket.getOutputStream());
readFromSocket = new DataInputStream(socket.getInputStream());
} catch (UnknownHostException ex) {
Logger.getLogger(MyView.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MyView.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Connection successful!\n");
try {
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
byte[] tempbytes = new byte[10000];
int byteread = 0;
in = new FileInputStream("C://temp.bmp");
out = new FileOutputStream("C://temp1.bmp");
while ((byteread = in.read(tempbytes)) != -1)
{
String aString = "";
StringBuilder sb = new StringBuilder(aString);
for (byte element : tempbytes) {
sb.append(String.valueOf(element));
sb.append(" ");
}
if (byteread == -1)
sb.append("e");
else
sb.append("\n");
aString=sb.toString();
// System.out.println(aString.length());
out.write(tempbytes);
// System.out.println(aString);
writeToSocket.writeBytes(aString);
}
请大家指教!!
分享到:
相关推荐
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景。Socket是计算机网络中的一个通信协议,它允许不同操作系统上的应用程序之间建立连接并交换数据。在这个场景中,Java作为客户端,C++作为服务端,两者...
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...
Java和C++之间进行Socket通信时,可能会遇到乱码问题,主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C++在Windows XP环境下可能使用GBK编码。解决这个问题的关键在于确保数据在传输过程中保持正确的...
标题中的"Java和C++的Socket通信如何发送结构体"主要涉及到两个关键问题:字节序和数据序列化。字节序是指在内存中存储多字节数据的顺序,分为大端字节序(Big-Endian)和小端字节序(Little-Endian)。大多数网络...
本话题聚焦于"java使用socket和c++通信",这是一个典型的跨语言、跨平台的网络编程场景。Java和C++都是广泛应用的编程语言,它们之间的通信能够实现多种系统的交互和集成。以下是关于这一主题的详细知识讲解。 首先...
同时,`libjni_socketcan.so`是一个动态链接库文件,它是Java Native Interface(JNI)的一部分,用于在Java代码和C/C++代码之间建立桥梁。JNI库在这里的作用是将Java层的调用转换为对底层SocketCAN C库的操作。 ...
C++与java的socket通信实例代码,cocos2dx socket通信与java服务器
本教程将深入探讨如何在C/C++服务器环境下利用Visual Studio 2010与Java客户端环境下的Eclipse进行Socket通信。 一、C/C++服务器端(VS2010) 在Visual Studio 2010中,我们可以使用Winsock库来实现Socket编程。...
它提供了语言无关的API,支持C++、Java、Python等多种语言。 2. Ice组件:主要包括冰刀(Ice割刀)、冰立方(Ice Cube)和冰刀片(Ice刀片)。冰刀是编译器,负责生成客户端和服务器代码;冰立方是运行时库,提供...
本示例探讨了如何使用C++实现服务器端,并用Java编写客户端,通过Socket进行通信。Socket编程是网络编程的基础,它允许两个不同的进程在同一个网络上进行通信。下面将详细介绍这个主题及其相关知识点。 1. **Socket...
本案例探讨了如何使用C++构建服务器端,并使用Java编写客户端,通过Socket进行通信。Socket编程是实现网络通信的一种基础方式,它允许不同计算机上的应用程序之间建立连接并交换数据。 首先,我们关注C++服务器端。...
本资源"**c++--java,socket.zip**"提供了一种实现C++与Java之间通过Socket进行通信的方法。Socket编程是一种标准的网络通信协议,允许不同计算机上的应用程序之间建立连接并交换数据。 首先,我们要理解Socket的...
当C++客户端需要向Java服务器发送数据时,先序列化protobuf消息,然后通过socket发送。服务器端接收到数据后,使用ProtobufDecoder进行解码,恢复成protobuf消息对象,再进行业务逻辑处理。同样,服务器如果需要向...
本项目实现了一个基于Socket的文件传输方案,其中Java作为服务端,C++作为客户端,使得Windows环境下的文件能够在两个程序之间安全、高效地传递。以下是对这个程序设计和实现的关键知识点的详细说明: 1. **Java ...
在Android开发中,有时我们需要进行Java层与C/C++(JNI)层的通信,以便利用C/C++的高性能优势处理一些底层任务。本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 ...
标题中的“Java和C++通信结构体发送”指的是在Java和C++这两种不同的编程语言之间,通过网络进行通信时如何有效地传递结构体数据的问题。在跨语言通信中,由于二进制序列化和内存布局的差异,直接传输结构体会面临...
7. **javacpp-1.3.3.jar**: JavaCPP是JavaCV的一个依赖,它提供了Java与C++之间的桥接,使得Java可以直接调用C++的库,如OpenCV和FFmpeg,提高了性能。 8. **使用流程**: 在实际应用中,开发者首先需要通过Socket...
在这个场景中,我们关注的是C++编写的服务器和Java编写的客户端如何利用Socket进行通信。下面将详细介绍这个过程。 首先,让我们了解Socket的基本概念。Socket可以被看作是两台计算机之间的通信端点,它提供了低...
在Java中,我们可以使用`java.net.Socket`和`java.net.ServerSocket`类来创建和管理Socket。客户端使用`Socket`类创建连接到服务器的实例,而服务器端则使用`ServerSocket`类监听传入的连接请求。 1. **服务器端...
这个“视频推流调试.rar”压缩包包含针对Java、PHP和C++三种不同编程语言的推流调试工具,适用于开发者进行实时视频流的传输测试和优化。以下是关于这些技术的详细解释: 1. **视频推流**: 视频推流是一种将视频...