java为服务器端,c为客户端 socket通讯问题
warss 2010-05-21 08:17:19 客户端只是发送数据时可以成功,但要接收服务器的回应时收不到
做java客户端测试也可以成功收发,所以感觉是c客户端的问题
java服务器端主要代码:
BufferedReader breader=new BufferedReader(new InputStreamReader(clientInput));
Socket socket;
InputStream clientInput = socket.getInputStream();;
OutputStream clientOutput =socket.getOutputStream(); ;
String strLine=breader.readLine();
String str="get your data:"+ strLine;
PrintWriter printWriter=new PrintWriter(clientOutput,true);
printWriter.println(str);
System.out.println("Finish sending to client...");
c客户端主要代码:
int connectServer(char* addr,int port){
struct sockaddr_in saddr;
int m_iSock;
int i,j;
m_iSock = socket(AF_INET,SOCK_STREAM,0);
if(m_iSock < 0){
printf("call to socket() failed\n");
exit(0);
}
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(addr);
saddr.sin_port = htons(port);
if(connect(m_iSock,(struct sockaddr *)&saddr,sizeof(saddr))==-1){
printf("Call to connect() failed.\n");
close(m_iSock);
exit(1);
}
return m_iSock;
}
main(){
int m_iSock;
int sockPort=3333;
char sockServer[]="192.168.1.101";
m_iSock=connectServer(sockServer,sockPort);
if (send(m_iSocket, "***",len, 0) == -1)
{
printf("Call to send() failed.\n");
exit(1);
}
close(m_iSock);
printf("send sucessful\n");
}
这是客户端可以成功发送数据的代码,现在问题是:
如果在close(m_iSock);前加上收数据的recv(m_iSocket,m_vInBuf,sizeof(m_vInBuf)/sizeof(char),0);客户端就会停在这句上等待数据,而服务器端也会停在 String strLine=breader.readLine(); 等待数据,两边都停了...调试发现客户端必须先close(socket),服务器端才能正常接收,但如果close,客户端又如何接受服务器返回的数据??
折腾了一天了,求教高手!!!!
谢谢谢谢!!!!!!!!!!!