大家帮我看一下,这段代码有问题吗?
我现在用java写的客户端,用VC写的服务端,通过客户端向服务端发送一个请求后,接收服务端返回结果的过程,但是我在客户端使用out.close(),in.close(),cScoket.close(); 来关闭时,一运行到in.close() 后,我的服务端程序就开始死循环,客户端无法断开。当把out.close(),in.close(),cScoket.close();注释了,改用out.shutdown()时,服务端显示断开了,但是用netstat -a查看,连接并没有断开,大家帮帮我呀!!!
Socket cSocket = new Socket("192.168.0.54", 5000);
if(cSocket.isConnected() == true){
System.out.println("连接服务端成功");
}
else {
System.out.println("连接服务端失败");
return "0";
}
String UserState="";
String retUserState = "";
try{
BufferedReader in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
PrintWriter out = new PrintWriter(cSocket.getOutputStream(),true);
String str = "name=john\n";
out.println(str);
out.flush();
retUserState = in.readLine();
System.out.println(retUserState);
out.close();
in.close();
cSocket.close();
}
catch(Exception e) {
System.out.println(e.getMessage());
}
return UserState;
我现在用java写的客户端,用VC写的服务端,通过客户端向服务端发送一个请求后,接收服务端返回结果的过程,但是我在客户端使用out.close(),in.close(),cScoket.close(); 来关闭时,一运行到in.close() 后,我的服务端程序就开始死循环,客户端无法断开。当把out.close(),in.close(),cScoket.close();注释了,改用out.shutdown()时,服务端显示断开了,但是用netstat -a查看,连接并没有断开,大家帮帮我呀!!!
Socket cSocket = new Socket("192.168.0.54", 5000);
if(cSocket.isConnected() == true){
System.out.println("连接服务端成功");
}
else {
System.out.println("连接服务端失败");
return "0";
}
String UserState="";
String retUserState = "";
try{
BufferedReader in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
PrintWriter out = new PrintWriter(cSocket.getOutputStream(),true);
String str = "name=john\n";
out.println(str);
out.flush();
retUserState = in.readLine();
System.out.println(retUserState);
out.close();
in.close();
cSocket.close();
}
catch(Exception e) {
System.out.println(e.getMessage());
}
return UserState;
==========================怎么个死循环?paste server side key code
UINT thread(LPVOID p)
{
char buff[1024];
memset(buff,0,sizeof(buff));
CString sendBuf;
CSize size;
size.cx=0;
size.cy=30;
int s=1,loop=1,flag=0;
CCSocketDlg *dlg=(CCSocketDlg*)AfxGetApp()->GetMainWnd();
s=1;
dlg->msgsock=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addlen));
if (dlg->msgsock==INVALID_SOCKET)
{
dlg->m_edit.SetWindowText("Error accept");
}
else
{
//启动线程
AfxBeginThread(thread,0);
dlg->SetForegroundWindow();
dlg->m_list.InsertItem(dlg->count++,"连接成功");
dlg->m_list.InsertItem(dlg->count++,inet_ntoa(dlg->serv.sin_addr));
dlg->m_list.Scroll(size);
dlg->m_button.EnableWindow(TRUE);
while(s!=SOCKET_ERROR)
{
memset(buff,0,sizeof(buff));
//循环接收数据
s=recv(dlg->msgsock,buff,sizeof(buff),0);
dlg->SetForegroundWindow();
if (s!=SOCKET_ERROR)
{
dlg->m_list.InsertItem(dlg->count++,buff);
dlg->m_list.Scroll(size);
//拆分buff中的数据
sendBuf = AnalyTuxedo(buff,dlg->Ora_DB);//处理客户端传来的数据
dlg->sendRetVal(sendBuf);//将处理结果返回给客户端
dlg->m_list.InsertItem(dlg->count++,sendBuf);
dlg->m_list.Scroll(size);
}
} send(dlg->msgsock,"Disconnected",1024,0);
dlg->m_list.InsertItem(dlg->count++,"Disconnected");
dlg->m_list.Scroll(size);
dlg->msgsock=NULL;
dlg->m_button.EnableWindow(FALSE);
} //终止线程
AfxEndThread(0);
return 0;
}
dolyp(逗逗),能否给我一段代码呢