socket上传图片的处理方法

最近在用socket上传数据,无奈传文本没有问题,但是传图片就是有问题。想过了各种方法,客户端传过去,然后,服务器端分包接收。这种方法,没有成功。似乎还有一种方法,就是客户端分包发送,服务器端接收,然后,组合到一起,但是想想,似乎更复杂。

最后终于解决了。就是用HTTP上传图片文件。然后,服务器端返回一个保存图片文件的id.(当然是服务器端保存文件的id).然后,在用socket上传,此时文件已经传过去了。所以,用socket上传的部分就不是那么大了。好了,上传代码。

//HTTP协议相关代码

[[NetManager sharedManager] sendPictureWithusername:name  msgtype:msgtype  files:path  hudDic:nil success:^(id responseDic) {

        NSString *fileID=[[responseDic objectForKey:@"data"]objectForKey:@"fileid"];
        /*
        responseDic----{
            data =     {
                fileid = 7203;
            };
            msg = ok;
            status = 0;
        }
         */

        //socket 提交服务器

       //要传到服务器的参数
        NSDictionary* jsonDic = [NSDictionary dictionaryWithObjectsAndKeys:fileID,@"fileID",@"picture",@"type",nil];

       //将字典转化为json字符串
       NSString *jsonString=[jsonDic JSONString];
              //将字符串变为流。
       NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

      //将流传到服务器。
       [chatSocket writeData:data withTimeout:-1 tag:300];

    } fail:^(id errorString) {
        NSLog(@"上传服务器失败“);
    }];
    

socket上传图片的处理方法,布布扣,bubuko.com

时间: 2024-10-28 15:46:48

socket上传图片的处理方法的相关文章

Android 通过SOCKET下载文件的方法

本文实例讲述了Android通过SOCKET下载文件的方法.分享给大家供大家参考,具体如下: 服务端代码 import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.

C++ socket编程——3种方法发送不同类型的数据

socket传送数据,一般来讲是char型的,如何传送我们需要的数据类型勒? 1.结构体:2, Json序列化,3. 定义一个class. 1.结构体 相对来说简单点,看看网上的一个例子: 假设需要传送的结构体如下: struct person{ char name[20]; int age; float high; }; 可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可. 发送方代码如下: char temp[100];   

php另类上传图片的方法(PHP用Socket上传图片)

服务器端: . 代码如下: <?phpset_time_limit(10);//* 设置不显示任何错误 *///error_reporting(0); function varinfo($str) {echo "<PRe>";var_dump($str);echo "<pre>";} $commonProtocol = getprotobyname("tcp");$socket = socket_create(AF_

android socket readline()方法读不到值的问题

在一次socket编码中,我从客户端发送一条数据到服务器, 可是在服务器我用readline()方法没取到值,也没报错. 于是我把可能发生错误的代码用输出语句包裹,到readline这一行的时候停止的编译, 我意识到是读取的时候出了问题 BufferedReader的readLine方法是一次读一行的,这个方法是阻塞的, 直到它读到了一行数据为止程序才会继续往下执行 直到程序遇到了换行符或者是对应流的结束符readLine方法才会认为读到了一行, 才会结束其阻塞,让程序继续往下执行 所以在写入的

(笔记)Linux服务器中判断客户端socket断开连接的方法

下面来罗列一下判断远端已经断开的方法:(转自http://blog.csdn.net/god2469/article/details/8801356) 法一: 当recv()返回值小于等于0时,socket连接断开.但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接. 法二: struct tcp_info info;   int len=sizeof(in

服务器中判断客户端socket断开连接的方法

1, 如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源. 所以,必须等客户端先关闭Socket后,服务器端再关闭Socket才能避免TIME_WAIT状态的出现. 2, 在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号. client端通过 pipe 发送信息到server端后,就关闭client端, 这时server端,返回信息给 client

socket模块的getaddrinfo方法详解

getaddrinfo方法用于通过url解析dns import sys,socket def dns_resolver(url): result = socket.getaddrinfo(url, None) print(result[0][4][0]) if __name__ == '__main__': dns_resolver('www.baidu.com') socket.getaddrinfo(host, port[, family[, socktype[, proto[, flag

Linux下进程间Socket通信调试debug方法

在一个复杂的软件系统中,往往需要有各个组件之间的数据传递,在组件间数据传递过程中,又会不可避免的出现一些小问题,这时候我们就需要来进行debug了,由于最近的一个系统使用到了collectd和rrdcached来收集数据和画图,它们之间采用了Unix socket通信,因此小小的学习了一下相关知识. 首先我们来回忆下Linux下进程通信有哪些方法: 管道(Pipe)及有名管道(FIFO)\UNIX BSD 信号(Signal) \UNIX BSD 报文消息队列(Message)\UNIX sys

Socket建立网络连接方法

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket . 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认. 1.服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求. 2.客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字. 为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字