求助!mpi利用独立进程间的通信实现C/S模式时,发现两个进程无法建立连接

slowslowslowly 2017-03-20 12:47:28
客户端程序:
#include<mpi.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, wchar_t **argv)
{
int errs = 0;
wchar_t port_name[MPI_MAX_PORT_NAME], port_name_out[MPI_MAX_PORT_NAME];
wchar_t serv_name[256];
int merr, mclass;
wchar_t errmsg[MPI_MAX_ERROR_STRING];
char outstr[1024];
char sb[1024];
char rb[1024];
int msglen;
MPI_Status stat;
int rank, newrank, flag;
MPI_Comm newcomm;

MPI_Init(&argc, &argv);

flag = 123;
wcscpy_s(serv_name, L"MyTest");

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Barrier(MPI_COMM_WORLD);
merr = MPI_Lookup_name(serv_name, MPI_INFO_NULL, port_name_out);
if (merr)
{
errs++;
MPI_Error_string(merr, errmsg, &msglen);
printf("Error in Lookup name:\"%ls\"\n", errmsg);
fflush(stdout);
}
else
{
sprintf_s(outstr, "rank:%d,looked service for:%ls", rank, port_name_out);
fprintf(stdout, "l%s\n", outstr);
}
sprintf_s(outstr, "Grank:%d,Trying connecting to server", rank);
fprintf(stdout, "%ls\n", outstr);
MPI_Comm_connect(port_name_out, MPI_INFO_NULL, 0, MPI_COMM_SELF, &newcomm);

MPI_Comm_rank(newcomm, &newrank);
sprintf_s(outstr, "Grank:%d,Lrank%d,connected to server", rank, newrank);
fprintf(stdout, "%ls\n", outstr);

sprintf_s(outstr, "Grank:%d,Lrank%d,requesting service...", rank, newrank);
fprintf(stdout, "%ls\n", outstr);
sprintf_s(sb, "Grank:%d,Lrank%d,require", rank, newrank);
msglen = strlen(sb);
MPI_Send(sb, msglen, MPI_CHAR, 0, flag, newcomm);

MPI_Barrier(MPI_COMM_WORLD);
MPI_Comm_disconnect(&newcomm);
MPI_Finalize();
return 0;
}
服务端程序:
#include<mpi.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, wchar_t *argv[])
{
int errs = 0;
wchar_t port_name[MPI_MAX_PORT_NAME], port_name_out[MPI_MAX_PORT_NAME];
wchar_t serv_name[256];
int merr, mclass;
wchar_t errmsg[MPI_MAX_ERROR_STRING];
char outstr[1024];
char sb[1024];
char rb[1024];
int msglen;
MPI_Status stat;
int rank, newrank, flag;
MPI_Comm newcomm;


MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
wcscpy_s(serv_name, L"MyTest");
MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
flag = 123;
newrank = 0;
sprintf_s(sb, "Grank:%d,Lrank:%d,require", rank, newrank);
msglen = strlen(sb);
fprintf(stdout, "process:%d,opening port....\n", rank);
merr = MPI_Open_port(MPI_INFO_NULL, port_name_out);
fprintf(stdout, "process:%d,port opened,with<%ls>\n", rank, port_name_out);
merr = MPI_Publish_name(serv_name, MPI_INFO_NULL, port_name_out);
if (merr)
{
errs++;
MPI_Error_string(merr, errmsg, &msglen);
printf("Error in publish_name:\"%ls\"\n", errmsg);
fflush(stdout);
}
MPI_Barrier(MPI_COMM_WORLD);


fprintf(stdout, "process:%d,accepting connection on :%ls\n", rank, port_name_out);
merr = MPI_Comm_accept(port_name_out, MPI_INFO_NULL, 0, MPI_COMM_SELF, &newcomm);
fprintf(stdout, "process:%d,accepted a connection on %ls\n", rank, port_name_out);

MPI_Comm_rank(newcomm, &newrank);
sprintf_s(outstr, "Grank:%d,Lrank%d,receiving", rank, newrank);
fprintf(stdout, "%s\n", outstr);
MPI_Recv(rb, msglen, MPI_CHAR, 0, flag, newcomm, &stat);
sprintf_s(outstr, "Grank:%d,Lrank%d,received<--%ls", rank, newrank, rb);
fprintf(stdout, "%s\n", outstr);

MPI_Barrier(MPI_COMM_WORLD);
fprintf(stdout, "server barrier after receiving passed\n");
merr = MPI_Unpublish_name(serv_name, MPI_INFO_NULL, port_name_out);
fprintf(stdout, "server after unpublish name\n");
if(merr)
{
errs++;
MPI_Error_string(merr, errmsg, &msglen);
printf("Error in Unpublish name:\"%ls\"\n", errmsg);
fflush(stdout);
}
MPI_Comm_disconnect(&newcomm);
fprintf(stdout, "server after disconnect\n");
MPI_Finalize();
return 0;
}
...全文
273 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧