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