- 论坛徽章:
- 0
|
问题如标题:
1、发送端代码
void* SendThread(void*){
cout<<"send thread is start : "<<endl;
Send sendfile;
// for (int i=0;i<20;i++)
for(;
{
if(sendqueue.empty())
continue;
if(!sendqueue.empty())
{
sendJob sendjob;
sendjob = sendqueue.pop();
cout<<" send first job is equals 19 ! ----------------------- "<<sendjob.m<<endl;
sendfile.SendFile(sendjob) cout<<"one file is send"<<endl;
}
}
}
SendFile函数代码:
int Send::SendFile(sendJob newJob)
{
cout<<"start send thread"<<endl;
struct sockaddr_in client_addr;
struct sockaddr_in server_addr;
int listenSock,newfd; //create listen socket in
char Filepath[50];
int Filefd;
strcpy(Filepath,Client_FILE_PATH);
strcat(Filepath,newJob.PRname);
listenSock = socket(AF_INET,SOCK_STREAM,0);
cout<<"create sock successful"<<endl;
bzero(&client_addr,sizeof(client_addr));
client_addr.sin_family=AF_INET; //address type
client_addr.sin_port=htons(DP_LISTEN_PORT); //local listening port
client_addr.sin_addr.s_addr=inet_addr("127.0.0.1" ;
if(listenSock<0)
{
perror("get socket failed" ;
exit(1);
}
if(bind(listenSock,(struct sockaddr*)&client_addr,sizeof(client_addr))<0) //bind
{
perror("bind error" ;
close(listenSock);
exit(1);
}
if(listen(listenSock,5)<0) //keep listening
{
perror("sever listen" ;
exit(4);
}
socklen_t sin_size;
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((newfd=accept(listenSock,(struct sockaddr*)(&server_addr),&sin_size))<0)
{
perror("error when accept" ;
exit(5);
}
Filefd = open(Filepath,O_RDONLY);
int readlen;
char buf[1024];
write(newfd,newJob.PRname,sizeof(newJob.PRname));
while((readlen=read(Filefd,buf,sizeof(buf)))>0) //read File into buffer
{
write(newfd,buf,readlen);
}
}
close(listenSock);
return 1;
}
接收端代码:
void* ReceiveThread(void*)
{
struct sockaddr_in server_addr;
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
perror("socket create failed" ;
exit(1);
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(C_First_listen_Port);
server_addr.sin_addr.s_addr=inet_addr("127.0.0.1" ;
if(connect(sockfd,(struct sockaddr*)(&server_addr),sizeof(server_addr))==-1) {
perror("connect error" ;
exit(1);
}
int readline,File;
char buf[1024];
char FileName[50];
char PathName[30];
readline = read(sockfd,FileName,sizeof(FileName));
char str[20];
int i=0;
sprintf(str,"%d",i);
strcpy(PathName,Client_FILE_PATH);
strcat(PathName,str);
strcat(PathName,FileName);
i++;
if((File=open(PathName,O_WRONLY|O_CREAT|O_TRUNC,0644))<0)
{
perror("file can not open" ;
exit(1);
}
while((readline=read(sockfd,buf,sizeof(buf)))>0) {
write(File,buf,readline);
}
// sleep(1);
close(File);
close(sockfd);
}
// exit(0);
}
运行很多次都报错,
bind error: Address already in use
请各位帮忙解决一下唄,调这个程序我都快崩溃了! |
|