人很多嘛,肯定有很多高手,我再把问题说的细一点: 我用InputStreamReader,in = new BufferedReader(new in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 有人告诉我应该用OjbectInputStream,但是我用 in = new ObjectInputStream(socket.getInputStream()); 这个干脆就退出了。备注:我的第1句和java写的程序通讯是没有问题的。
AfxSocketInit(NULL);
CSocket sockClient;
sockClient.Create(); CString szIP;
GetDlgItemText(IDC_EDIT_IPADDRESS,szIP);
if(!sockClient.Connect((LPCTSTR)szIP, 800))
{
AfxMessageBox("连接到对方机器失败!");
return;
}
SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO)); CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024); UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw); dwRead+=dw;
} SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
、、、、、、、、、、、、、、、、、、、、、、、、、
void CServerDlg::OnButtonLicsen()
{
// TODO: Add your control notification handler code here
CFileDialog Dlg(TRUE);
if(Dlg.DoModal()!=IDOK)
return;
CFile myFile;
if(!myFile.Open(Dlg.GetPathName(), CFile::modeRead | CFile::typeBinary))
{
AfxMessageBox("文件不存在!",MB_OK|MB_ICONERROR);
return;
}
CSocket sockSrvr;
sockSrvr.Create(800); sockSrvr.Listen();
CSocket sockRecv;
sockSrvr.Accept(sockRecv); SOCKET_STREAM_FILE_INFO StreamFileInfo;
WIN32_FIND_DATA FindFileData; FindClose(FindFirstFile(Dlg.GetPathName(),&FindFileData));
memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));
strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle()); StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes;
StreamFileInfo.ftCreationTime = FindFileData.ftCreationTime;
StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;
StreamFileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime;
StreamFileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;
StreamFileInfo.nFileSizeLow = FindFileData.nFileSizeLow; sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO)); UINT dwRead=0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
UINT dw=myFile.Read(data, 1024);
sockRecv.Send(data, dw);
dwRead+=dw;
}
myFile.Close(); sockRecv.Close();
AfxMessageBox("发送完毕!");
}
请高手讲解,谢谢
java写的代码做为client,vc或delphi写的代码作为server,
client发到server的消息,对方能收到
但是server发回来的消息怎么收不到呢?
我用InputStreamReader,in = new BufferedReader(new in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
有人告诉我应该用OjbectInputStream,但是我用
in = new ObjectInputStream(socket.getInputStream());
这个干脆就退出了。备注:我的第1句和java写的程序通讯是没有问题的。
try {
socket =new Socket(host,port);
System.out.println("Socket:"+socket);
} catch (Exception e) {
e.printStackTrace();
try {
conn.close();
} catch (Exception ee) {
e.printStackTrace();
System.exit(1);
}
System.exit(1);
} try {
in=new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
out=new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())),true);
} catch(Exception e) {
e.printStackTrace();
}
}
发送命令
out.println("aaaaa");接受
str=in.readLine();
public static BufferedReader in;
public static PrintWriter out;