正文

聊天(C++)2005-08-07 10:33:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/3585.html

分享到:

1  局域网聊天的程序(C++版)  
  //server
#include <winsock.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define PORT 100
#define socklen_t int
#pragma comment(lib, "wsock32.lib")
SOCKET s;
SOCKET client;
sockaddr_in from;
void ServerThread()
{
char message[256];
while(1)
{
strcpy(message,"");
int len=recv(client,message,sizeof(message),0);
if (strcmp(message,"")!=0)
{
cout<<"从"<<inet_ntoa(from.sin_addr)<<"得到消息:\n";
//cout<<"len:"<<len<<endl;
message[len]='\0';
cout<<message;
}
}
}
int main()
{
sockaddr_in srv;
int fromlen=sizeof(from);
char message[256]="Welcome!\n";
WSADATA wsadata;
WORD VersionRequested=MAKEWORD(1,1);
if (WSAStartup(VersionRequested,&wsadata))
{
cout<<"Wsadata start failed\n";
return 0;
}
s=socket(PF_INET,SOCK_STREAM,0);
if (s==INVALID_SOCKET)
{
cout<<"Socket create failed\n";
return -1;
}
srv.sin_family=PF_INET;
srv.sin_addr.s_addr=htonl(INADDR_ANY);
srv.sin_port=htons(PORT);
if (bind(s,(struct sockaddr *)&srv,sizeof(srv))!=0)
{
cout<<"bind failed\n";
closesocket(s);
return -1;
}
cout<<"Wait...\n";
if (listen(s,5)!=0)
{
cout<<"listen failed\n"<<endl;
return -1;
}
while(1)
{
client=accept(s,(struct sockaddr *)&from,&fromlen);
send(client,message,strlen(message),0);
cout<<"connect from "<<inet_ntoa(from.sin_addr)<<endl;
DWORD Sthread;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ServerThread),NULL,0,&Sthread);
while(fgets(message,strlen(message),stdin))
{
cout<<"发出消息:"<<message<<endl;
send(client,message,strlen(message),0);
}
}
closesocket(s);
WSACleanup();
}

   
   
  作者: elva6401    封     2005-7-27 16:08   回复此发言   删除此发言  
  
--------------------------------------------------------------------------------

2  回复:局域网聊天的程序(C++版)  
  //client
#include <winsock.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define PORT 100
#define socklen_t int
#pragma comment(lib, "wsock32.lib")
SOCKET client;
char server[50];
void ClientThread()
{
char message[256];
while(1)
{
strcpy(message,"");
int len=recv(client,message,sizeof(message),0);
if (strcmp(message,"")!=0)
{
cout<<"从"<<server<<"得到消息:\n";
//cout<<"len:"<<len<<endl;
message[len]='\0';
cout<<message;
}
}
}
int main()
{
char message[256];
sockaddr_in srv;
WSADATA wsadata;
WORD VersionRequested=MAKEWORD(1,1);
if (WSAStartup(VersionRequested,&wsadata))
{
cout<<"Wsadata start failed\n";
return 0;
}
client=socket(PF_INET,SOCK_STREAM,0);
if (client==INVALID_SOCKET)
{
cout<<"Socket create failed\n";
return -1;
}
srv.sin_family=PF_INET;
srv.sin_addr.s_addr=htonl(INADDR_ANY);
srv.sin_port=htons(PORT);
cout<<"请输入服务器IP:";
cin>>server;
srv.sin_addr.s_addr = inet_addr(server);
if (connect(client,(struct sockaddr *)&srv,sizeof(srv))==SOCKET_ERROR)
{
cout<<"无法连接服务器.\n";
WSACleanup();
return -1;
}
while(1)
{
DWORD thread;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ClientThread),NULL,0,&thread);
while(fgets(message,strlen(message),stdin))
{
cout<<"发出消息:"<<message<<endl;
send(client,message,strlen(message),0);
}
}
closesocket(client);
WSACleanup();
}  
   
   
  作者: elva6401    封     2005-7-27 16:09   回复此发言   删除此发言  
  
--------------------------------------------------------------------------------

3  回复:局域网聊天的程序(C++版)  
  注:
1.不程序很多代码都是参照"二品黄山"的C版
(http://post.baidu.com/f?kz=14413292)
2.本程序用C++的多线程编程,多线程编程是我第一次用,不知道对不对
3.程序只在一台电脑实现过,穷啊!没有2台:).  

阅读(5377) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册