请高手帮忙看看///感激不尽

fangge 2007-03-19 05:14:35
//server.cpp
#include<stdio.h>
#include<winsock2.h>
#include<string.h>
#include<conio.h>


SOCKET server;
SOCKET client;
WSADATA WSAData;
int WSAreturn;
sockaddr_in local;
sockaddr_in from;
int fromlen = sizeof(from);
char information[50];
char welcome[]="欢迎您登陆我的主机!\n";

char ip[]="您的IP是:";

int i=1; //用来记录输入字符的个数
char c;
bool cansend=false;




int GetIp()
{
WSAreturn = WSAStartup(0x101,&WSAData);
if(WSAreturn)
{
printf("发生一个未知错误!\n");
return 0;
}
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons((u_short)23);
server = socket(AF_INET,SOCK_STREAM,0);
if(server==INVALID_SOCKET )
{
printf("无法创建套接字!\n");
return 0;
}
if(bind(server,(sockaddr *)&local,sizeof(local))!=0)
{
printf("无法绑定套接字!\n");
return 0;
}
if(listen(server,5)!=0)
{
printf("无法监听端口!\n");
return 0;
}

while(true)
{

char receive[256];
printf("正在等待用户连接...\n");
client = accept(server,(struct sockaddr *)&from,&fromlen);
strcpy(information,inet_ntoa(from.sin_addr));
strcat(welcome,information);
printf("接受来自%s的连接...\n",inet_ntoa(from.sin_addr));
printf("正在发送欢迎消息...\n");
send(client,welcome,strlen(welcome),1);
//send(client,ip,strlen(ip),0);
//send(client,information,strlen(information),0);
printf("欢迎消息信息已经成功发送至客户端!\n");
delete[] receive;
while(1)
{
char chatfrom[256];
char chat[256];
recv(client,chatfrom,sizeof(chatfrom),0);
printf("*******接收到的消息*******\n");
printf("%s\n",chatfrom);
printf("***********结束*********\n");
printf("回复:");
while((i-1)<=255)
{

chat[i-1]=getchar();
if(chat[i-1]=='\n')
{
break;
}
i++;
}

delete[] chat;
delete[] chatfrom;
send(client,chat,strlen(chat),0);

printf("\n已经成功发送信息!\n");


}
closesocket(client);
}

closesocket(server);
WSACleanup();
return 1;
}


void main()
{
int ok;
ok = GetIp();
if(ok==0)
printf("无法完成请求!\n");
system("pause");

}
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangge 2007-03-21
  • 打赏
  • 举报
回复
谢谢大家的鼎力解答.程序的问题已经解决,特别感谢i_love_pc(好好学习,天天接分)!
fangge 2007-03-21
  • 打赏
  • 举报
回复
谢谢大家的帮助,已经调整了程序,可是新的问题又出来.这次是在服务端发送数据客户端收不到的问题,
i_love_pc 2007-03-20
  • 打赏
  • 举报
回复
如果程序是借鉴别人的代码,那再回去看一下时不时一致,如果是自己写的请再考虑一下实现的方式。另外有几个小错误需要提示一下,只有new~delete是成对使用的,
char receive[256];
...
delete[] receive;
这种方式会引起内存错误。
还有字符数组申请空间之后最好先初始化一下,或者置空(memset()),否则可能会有一些字符尾巴。
pp616 2007-03-19
  • 打赏
  • 举报
回复
错误信息提供点吧。手头没环境。没办法编译代码。
constantine 2007-03-19
  • 打赏
  • 举报
回复
socket我不是很熟悉,找其他的,我还停留在使用控件的菜鸟层度
fangge 2007-03-19
  • 打赏
  • 举报
回复
上面的 程序是用winsock做一个简单的聊天程序,在win2003,bcc32编译环境下编译成功,但是运行的时候出现错误,不知道问题所在,请高手帮忙指点指点,谢谢!
fangge 2007-03-19
  • 打赏
  • 举报
回复
//client.cpp
#include<stdio.h>
#include<winsock2.h>
#include<string.h>
#include<conio.h>

SOCKET client;
WSADATA WSAData;
int WSAreturn;
sockaddr_in to;
char information[256];
char welcome[]="我已经登陆到你的主机!\n";


char servername[256]="192.168.0.123";

char c;

int i=1; //用来记录输入字符的个数
long result;
bool cansend=true;

int connection()
{
WSAreturn = WSAStartup(0x101,&WSAData);
if(WSAreturn)
{
printf("发生一个未知错误!\n");
return 0;
}

client = socket(AF_INET,SOCK_STREAM,0);
to.sin_family = AF_INET;
to.sin_port = htons(23);

while(true)
{


printf("局域网主机IP:%s\n",servername);

to.sin_addr.s_addr = inet_addr(servername);

printf("正在连接...\n");
result = connect(client,(struct sockaddr *)&to,sizeof(to));
if(SOCKET_ERROR==result)
{
// 连接失败
printf("对不起,无法连接到目标主机!\n");
WSACleanup();
return 0;
}
else
{
char receive[256];
cansend=false;
recv(client,receive,sizeof(receive),0);
printf("*******欢迎消息消息*******\n");
printf("%s\n",receive);
printf("***********结束*********\n");
cansend=true;
delete[] receive;
while(1)
{


if(cansend)
{
char chatto[256];
printf("请输入下一条信息(256个字符之内):");
while(((i-1)<=255))
{
chatto[i-1]=getchar();
if(chatto[i-1]=='\n')
{
break;
}
i++;
}
//scanf("%s",&chatto);
//printf("\n%s",chatto);
send(client,chatto,strlen(chatto),0);
delete[] chatto;
printf("\n已经成功发送信息!\n");
cansend=false;
}
else
{
char chatfrom[256];
printf("正在等待对方发来消息...\n");
cansend=false;
recv(client,chatfrom,sizeof(chatfrom),0);
printf("*******接收到的消息*******\n");
printf("%s\n",chatfrom);
printf("***********结束*********\n");
cansend=true;
delete[] chatfrom;
}

}

}


}
closesocket(client);
WSACleanup();
return 1;
}


void main()
{
connection();
getch();
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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