我有一个socket 对象 比如说叫s吧 client那边检查完后,send一个‘ok’过来 我server这边用的是s.recv(1024) ,这样client那边send完了,等待server给他返回数据,可是server认为client没有发送完,估计是不够1024 这种情况应该怎么办好?有什么办法让server和client 和谐一点么?
[code]int process_chat_request(int client_socket, char * protocol_buffer, char * receive_buffer) { .... //发送一条信息到客服端 send(client_socket, receive_buffer, send_message_plen, 0); //接收客服 int length = recv(client_socket, &chat_buf, 300, 0); //收完之后,我打印protocol_buffer与 receive_buffer的值 ,已不是在原来传过来的值。 }[/code]请问这是为什么?
服务器端 RedHat: int mySock = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in myAddr; myAddr.sin_family=AF_INET; myAddr.sin_port=htons(81); myAddr.sin_addr.s_addr=INADDR_ANY; bind(mySock,(sockaddr*)(&myAddr),sizeof(sockaddr)); listen(mySock,5); int newSock; sockaddr_in clientAddr; socklen_t addrLen=sizeof(clientAddr); char recvBuf[100]={0}; while(1) ...
下面为一段学习测试程序,使用socket下载webserver上的gif文件,然后保存在本地。 现在程序已经能够把server上的文件保存在本地,而且字节也相等(我是直接查看文件属性看的)。 问题是:下载的gif文件不能正确显示,不能显示为一张图片。 测试环境: ------------------ gcc version 3.4.2(mingw-special) windows xp -------------------- int main(int ac,char *av[]) { char pack[1024] = {0} ; sprintf(pack,"GE...
本人使用该程序与一台本地通信设备建立数据通信.发送正常的帧(MsgList)时,recv方法能够接收到数据。但如果发送非正常的帧(即通信设备不会应答该帧),则程序就一直阻塞在recv方法那里,无法抛出异常。请教各位,怎么使得程序可以检查出对方无数据从socket发送过来,从而让recv抛出异常。使用select来检查吗? (附:本人使用while的原因是由于应答帧可能是由远程通信设备产生,经过本地设备中转而来,这中间需要消耗一定的时间,当...
我将buf设得很大,为什么一次还是接收不完
[code]
#include
我在写一个socket程序时候, 发送完后消息包后,再接收应答消息, read函数 但是有时候会报一个 errno =84 错误,Invalid or incomplete multibyte or wide character, 请问这是什么原因造成的 if (write(g_sockfd,bind_data,SGIP_HEAD_BASE_LEN+SGIP_ORDER_BASE_LEN)<0) { printf("Write order failed!\n"); return -1; } printf("write order ok!\n"); memset(recv_buf, 0, sizeof(recv_buf)); ret = ...
1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要循环读取)。
2...
服务端:[code]from socket import * from time import ctime tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(('localhost', 21567)) tcpSerSock.listen(5) while True: print 'waiting for connection.....' tcpCliSock, addr = tcpSerSock.accept() print '...conneced from:', addr while True: data = tcpCliSock.recv(1024) if not data: break tcpCliSock...