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*8int 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语言的文件传送!