一共有2个程序,1个做SERVER,1个做CLIENT,CLIENT向SERVER发送要传输的文件名称,SERVER把这个文件回传给CLIENT。
碰到的问题是,为什么connect()失败?程序:
server.cpp
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>#define RFNAME 20
int main()
{
FILE *f;
unsigned port=2222;
struct sockaddr_in local,client;                
int iaddr;
int temp1,temp2;    
char fname[RFNAME];
char msg[256];
static SOCKET s_1,s_2;         
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
MessageBox(NULL,"invoke WSAStartup() error!","Socket API Error",0);
local.sin_family = AF_INET;
local.sin_port = ((u_short)port);
local.sin_addr.s_addr = INADDR_ANY;
s_1 = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
if(!(s_1))
MessageBox(NULL,"Create socket error!","Socket API Error",0);
if(bind(s_1,(struct sockaddr*)&local,sizeof(local)) == SOCKET_ERROR)
MessageBox(NULL,"Binding error!","Socket API Error",0);
listen(s_1,8);
printf("Loading...\n");
printf("press '@' to stop the program\n");
while ((getchar()!='@'))
{

iaddr = sizeof(client);
s_2 = accept(s_1,(struct sockaddr*)&client,&iaddr);
if(s_2 == INVALID_SOCKET)
MessageBox(NULL,"invoke accept() error","Socket API error",0);
else{
printf("Accepted client: %s:%d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
printf("The file name is:");
temp1 = recv(s_2,fname,RFNAME,0);
if(temp1 == SOCKET_ERROR)
MessageBox(NULL,"Can't receive the filename!","Socket API error",0);
else{
if((f = fopen(fname,"r")) == NULL)
MessageBox(NULL,"Can't open the file!","C Runtime Library function error",0);
else{
fseek(f, 0, SEEK_SET);
fread(msg, 256,1, f);
temp2 = send(s_2,msg,256,0);
if(temp2 == SOCKET_ERROR)
MessageBox(NULL,"Sending error","SOCKET API error",0);
else{
printf("\n");
printf("Mission Completed");
closesocket(s_2);
}
}
}
}
}
closesocket(s_1);
WSACleanup();
return 0;
} client.cpp
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>#define RFNAME 20int main()
{
WSADATA wsadata;
SOCKET client;
struct sockaddr_in server;
FILE *f;
unsigned  port = 2222; 
char *host = "127.0.0.1";
char name[RFNAME];
char msg[256];
int temp1,temp2;
WSAStartup(MAKEWORD(2,2),&wsadata);
client = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
if (client == INVALID_SOCKET)
MessageBox(NULL,"invoke socket() error!","Socket API error",0);
server.sin_family = AF_INET;
server.sin_port = htons((u_short)port);
server.sin_addr.s_addr = inet_addr(host);
if (connect(client,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR){ // MessageBox(NULL,"connecting error!","Socket API error",0);
printf("connect() failed: %d\n", WSAGetLastError());
}
else{
printf("connecting completed\n");
printf("input the filename:");
scanf("%s",name);
temp1 = send(client,name,RFNAME,0);
if(temp1 == SOCKET_ERROR)
MessageBox(NULL,"Can't send the file!","Send() Error",0);
else{
temp2 = recv(client,msg,256,0);
if(temp2 == SOCKET_ERROR)
MessageBox(NULL,"Can't receive the file!","Recv() Error",0);
else{
if((f = fopen(name,"w+")) == NULL)
MessageBox(NULL,"File error!","C RUNTIME Library Error",0);
else{
fwrite(msg,256,1,f);
fclose(f);
printf("\n");
printf("file has been saved!\n");
}
}
}
}
shutdown(client,1);
closesocket(client);
WSACleanup();
scanf("\n");
return 0;
}