使用socket传输10M大小的图片

刚开始学习socket是为了两台电脑之间能传输10M大小的图片。

但是网上一些socket的例程都是传输一个字符串,C++的基础也比较差。摸索了好久才写好这个程序,期间也遇见了很多问题:

1.如何分包发送:

我选用的发送buf是8k字节的,但是如何将10M大小的数据通过这个8K字节发送出去,困扰了好久,后来通过这个解决了

	infile.seekg(0,ios::end);
	length = infile.tellg();
	infile.seekg(0,ios::beg);

/* step3 发送数据 */
        while(length > 0)
	{
		if(length<8192)
		{
			writelength = length;
		}
		else
		{
			writelength = 8192;
		}
		infile.read(buffer,writelength);
		length = length-8192;
       	 	ret = send(sockfd, buffer,writelength,0);
		realsendlength = realsendlength +ret;
		if(ret == -1)
		{
			cout << "send data failed"<
先读出待发送文件的大小,然后分每个字节发送:(主要对fstream文件流不熟悉)

2.刚开始的时候经常接收到一半的时候就停了

主要是因为

ret = recv(c_sockfd, revData, 8192, 0);
返回值的问题:
a.接收过程中ret返回值不是一直为8192;我之前认为除了最后一个包不一定返回8192,其他的都是应该是8192,实际并不是这样;
b.读完最后一组数据后ret不为0,好多资料上用while(ret > 0)作为循环接收的条件,接收完之后就一直在循环里不跳出来。(不知道是不是我个人问题)

3.linux下使用ofstream新建文件失败的问题

Linux下对用户权限管理比较严格,在生成的可执行文件没有写权限的时候,使用ofstream新建文件一直失败。(曾经一度怀疑是不是文件存错位置了,把文件系统找了个遍)


我在windows和Linux系统下都写了一个socket ,Windows和Linux之间可以相互传输文件。

windows下:http://download.csdn.net/download/m0_37877590/10142125

linux 下:http://download.csdn.net/download/m0_37877590/10142131

这个两个系统下程序差距不大,就是头文件,还有一些参数的改动,socket的函数基本是一样的

你可能感兴趣的:(C++,socket)