Socket:java与C之间的文件传送<4>(JAVA与C通信)

来源:互联网 发布:软交换网络 编辑:程序博客网 时间:2024/05/17 23:23
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语言的文件传送!