http://blog.csdn.net/mhapdream/article/details/8929253 Socket:java與C之間的文件傳送<1>(C語言之間的通信)
http://blog.csdn.net/mhapdream/article/details/8929457 Socket:java與C之間的文件傳送<2>(JAVA語言之間的通信)
http://blog.csdn.net/mhapdream/article/details/8929590 Socket:java與C之間的文件傳送<3>(JAVA與C通信需要注意的地方)
http://blog.csdn.net/mhapdream/article/details/8929638 Socket:java與C之間的文件傳送<4>(JAVA與C通信)
java客戶端!
package client;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
import java.util.*;
/**
*
* @author kingfish
* @version 1.0
*/
public class Client {
public static byte[] i2b(int i) {
return new byte[] { (byte) ((i >> 24) & 0xFF),
(byte) ((i >> 16) & 0xFF), (byte) ((i >> 8) & 0xFF),
(byte) (i & 0xFF) };
}
public static void main(String[] args) throws Exception {
int size,length;
Socket socket = new Socket("127.0.0.1",2000);
OutputStream outputstream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
File file = new File("D:\\TTPmusic\\姚貝娜 - 斷橋離情.mp3");
length = (int)file.length();
outputstream.write(i2b(length));
System.out.println(length);
FileInputStream is = new FileInputStream("D:\\TTPmusic\\姚貝娜 - 斷橋離情.mp3");
byte[] buffer = new byte[4096 * 2];
byte[] b = new byte[4];
while ((size = is.read(buffer)) != -1) {
System.out.println(size+" ");
outputstream.write(buffer,0,size);
while(inputStream.read(b)!= -1)
{
break;
}
}
outputstream.close();
socket.close();
}
}
C++服務器端
// *******************************************************************
// server.cpp : Defines the entry point for the console application.
// *******************************************************************
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
#define PORT_SERVER 2000
#define NUM_CLIENTS 10
#define SIZE 1024*8
int b2i(char b[]) {
int value = 0;
for (int i = 0; i < 4; i++) {
int shift = (4 - 1 - i) * 8;
value += (b[i] & 0x000000FF) << shift;
}
return value;
}
int main(int argc, char* argv[])
{
FILE *fp;
printf("Start up tcp server.\n");
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 0);
if (0 != WSAStartup(sockVersion, &wsaData))
{
printf("Failed to retrive socket version.\n");
return 0;
}
SOCKET sock_sev;
sock_sev = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sock_sev)
{
printf("Invalid socket.\n" );
WSACleanup();
return 0;
}
sockaddr_in addr_sev;
addr_sev.sin_family = AF_INET;
addr_sev.sin_port = htons(PORT_SERVER);
addr_sev.sin_addr.s_addr = INADDR_ANY;
if (SOCKET_ERROR == bind(sock_sev, (sockaddr *)&addr_sev, sizeof(addr_sev)))
{
printf("Failed to bind.\n");
WSACleanup();
return 0;
}
if (SOCKET_ERROR == listen(sock_sev, NUM_CLIENTS))
{
printf("Failed to listen.\n");
WSACleanup();
return 0;
}
SOCKET sock_client;
sockaddr_in addr_client;
fp=fopen("Resul11t.xml","wb");
int nAddrLen = sizeof(addr_client);
long int x=0;
char tmp[SIZE];
int length;
char datalength[20];
sock_client = accept(sock_sev, (sockaddr *)&addr_client, &nAddrLen);
if (INVALID_SOCKET == sock_client)
{
printf("Failed to accept.\n");
return 0;
}
recv(sock_client,datalength,21,0);
length=b2i(datalength);
printf("%d\n",length);
while (recv(sock_client,tmp,SIZE,0)!=SOCKET_ERROR)
{
x=x+SIZE;
if(x<length)
{
printf("%d ",sizeof(tmp));
fwrite(tmp,1,SIZE,fp);
}
else
{
fwrite(tmp,1,length+SIZE-x,fp);
printf("%d ",sizeof(tmp));
fclose(fp);
break;
}
send(sock_client,"OK",2,0);
/*
printf("%d ",sizeof(tmp));
fwrite(tmp,1,sizeof(tmp),fp);
memset(tmp, 0, sizeof(tmp));
*/
}
fclose(fp);
closesocket(sock_client);
return 0;
}
至此,完成了java與c語言的文件傳送!