Socket:java與C之間的文件傳送(JAVA與C通信)

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語言的文件傳送!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章