社区
网络编程
帖子详情
怎么做一个简单的网络通信程序
bigbee
2002-06-08 11:50:40
一个作业.就是在一台电脑上发一串数据,在另一台电脑上收.
应该很简单的吧.可我不会做.最好用c/c++
...全文
98
4
打赏
收藏
怎么做一个简单的网络通信程序
一个作业.就是在一台电脑上发一串数据,在另一台电脑上收. 应该很简单的吧.可我不会做.最好用c/c++
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dycdyc123
2002-06-08
打赏
举报
回复
6.在程序菜单项中添加"本机IP地址":
void CServerView::OnIp()
{
int WSAReturn;
WSAReturn=WSAStartup( 0x0101, &WSAData );
if( WSAReturn == 0 ){
gethostname( Hostname, 260 );
struct hostent *pHostEnt;
pHostEnt = gethostbyname( Hostname);
if( pHostEnt != NULL ){
wsprintf( Hostaddress, "%d.%d.%d.%d",
( pHostEnt->h_addr_list[0][0] & 0x00ff ),
( pHostEnt->h_addr_list[0][1] & 0x00ff ),
( pHostEnt->h_addr_list[0][2] & 0x00ff ),
( pHostEnt->h_addr_list[0][3] & 0x00ff ) );
CString out;
out.Format(Hostaddress);
AfxMessageBox(out);
}
}
}
7.在程序菜单中添加"发送消息":
void CServerView::OnSendmessage()
{
// TODO: Add your command handler code here
char msg[2000];
Csend Sendmessage;
if(Sendmessage.DoModal()
==IDOK&&!Sendmessage.m_Message.IsEmpty())
{
wsprintf(msg,"R: "+Sendmessage.m_Message);
sendto(m_sock,msg,1024,0,
(PSOCKADDR)&saClnt,saClntLen);
m_data[count++]=Sendmessage.m_Message;
flag=TRUE;
InvalidateRect(NULL);
}
}
8.为发送消息项添加一个对话框的类,名为send,有一个文本框,用来发送消息.并为文本框添加CString m_Message 变量,并在ServerView.cpp中添加#include "send.h"
9.为发送消息项添加一个判断函数:
void CServerView::OnUpdateSendmessage
(CCmdUI* pCmdUI)
{
// TODO: Add your command update
UI handler code here
pCmdUI->Enable(FALSE);
if(Isconnect)
pCmdUI->Enable(TRUE);
}
10.再窗口显示消息:
void CServerView::OnDraw(CDC* pDC)
{if(flag)
{sizeTotal.cy+=20;
for(int j=65;jTextOut(10,y,m_data[i]);
y+=20;
}
// TODO: add draw code for native data here
}
11.在Project中点击Settings中选择Link项添加wsock32.lib. 最后编译程序,就可以得到Server.exe程序.
现在介绍客户机程序:
1.创建一个名为"client"的项目,单文档界面.
2.在clientview.h中加入代码:
#include "winsock.h"
添加变量:
CString m_data[1000];
HANDLE m_hListenThread;
SOCKET m_sock;
SOCKADDR_IN m_saSrvr;
BOOLIsconnect;
int count;
CSize sizeTotal;
BOOLflag;
3.在构造函数中初始化变量:
CClientView::CClientView()
{
// TODO: add construction code here
Isconnect=FALSE;
sizeTotal.cy=350;
sizeTotal.cx=300;
flag=FALSE;
}
4.在析构函数中完成清除操作:
CClientView::~CClientView()
{if(m_bInitialized)
WSACleanup();
closesocket(m_sock);
if(m_hListenThread)
::TerminateThread(m_hListenThread,0);
}
5.在菜单中添加"拨号"项:
void CClientView::OnDial()
{
// TODO: Add your command handler code here
count=5;
if(m_bInitialized)
{
AfxMessageBox("Already dialing");
return;
}
Cdial dial;
if(dial.DoModal()==
IDOK&&!dial.m_HostAddress.IsEmpty())
{
m_saSrvr.sin_family=AF_INET;
m_saSrvr.sin_addr.S_un.S_addr=htonl
(INADDR_ANY);
m_saSrvr.sin_addr.S_un.S_addr=inet_addr
(dial.m_HostAddress);
m_saSrvr.sin_port=htons(5050);
int status;
WSADATA wsaData;
m_data[0]="initializing Windows Sockets DLL....";
if((status=WSAStartup(0x0101,&wsaData))==0)
{
m_data[0]+="Succeeded";
m_bInitialized=TRUE;
}
else
{
m_bInitialized=FALSE;
}
m_sock=socket(AF_INET,SOCK_DGRAM,0);
m_data[1]="Creating socket....";
if(m_sock==INVALID_SOCKET)
{
m_data[1]+="Failed";
}
m_data[1]+="Succeeded";
m_data[2]="Binding socket....";
sockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_addr.S_un.S_addr=htonl
(INADDR_ANY);
sa.sin_port=htons(0);
if(bind(m_sock,(PSOCKADDR)&sa,
sizeof(sa))==SOCKET_ERROR)
{
m_data[2]+="Failed";
closesocket(m_sock);
}
m_data[2]+="Succeeded";
m_data[3]="Creating listener thread....";
unsigned long idThread;
m_hListenThread=CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)Listen,
(void *)this,0,&idThread);
if(m_hListenThread)
{m_data[3]+="Succeeded";
m_data[4]+="Waiting....";
}
else
m_data[4]+="Failed";
InvalidateRect(NULL);
}
}
6.添加一个拨号对话框,名为dial,有一个文本框用来写IP地址.并在clientview.cpp中添加代码:
#include dial.h
7.在拨号项添加一个判断函数:
void CClientView::OnUpdateDial
(CCmdUI* pCmdUI)
{
// TODO: Add your command update
UI handler code here
pCmdUI->Enable(TRUE);
if(Isconnect)
pCmdUI->Enable(FALSE);
}
8.添加接收与发送消息的线程:
long WINAPI Listen(CClientView *pView)
{
char msg[2000];
pView- >m_data[5]="Sending ATTACH command";
pView- >InvalidateRect(NULL);
wsprintf(msg,"A: ");
sendto(pView- >m_sock,msg,1024,0,
(PSOCKADDR)&pView- >m_saSrvr,sizeof
(pView- >m_saSrvr));
int saSrvrLen ,nchar;
while(1)
{
saSrvrLen=sizeof(pView->m_saSrvr);
nchar=recvfrom(pView- >m_sock,msg,1024,0,
(PSOCKADDR)&pView- >m_saSrvr,&saSrvrLen);
if(nchar<0) { pView->m_data[pView- >count++]="Error in recvform";
pView- >InvalidateRect(NULL);
}
else
{
pView->m_data[pView- >count++]=msg;
pView->Isconnect=TRUE;
pView->flag=TRUE;
pView->InvalidateRect(NULL);
}
}
return(0);
}
9.同主程序一样做一个发送消息项,代码如上.
10.显示程序也与主程序一样,代码如上.
11.在Project中点击Settings中选择Link项添加wsock32.lib.
12.编译程序便可得到client.exe程序.
server.exe 和 client.exe 做完后,就可以在具有TCP/IP协议下的网络中执行. 通过上面的例子,你可以很快了解vc++网络编程的优点,你还可以添加其它功能项,在这我就不多加叙述了.希望我的程序能起到抛砖引玉的目的,让我们都能编出好的网络程序.
dycdyc123
2002-06-08
打赏
举报
回复
我有代码!
网络编程已经成为一种时髦,以TCP/IP协议的网络更为流行.自己编一个服务器与客户机互相传送消息的程序,以便增加自己网络编程的经验.下面我就介绍一下我编的程序.
首先介绍服务器程序:
1.创建一个名为"server"的项目,单文档界面.
2.在serverview.h中加入代码:
#include "winsock.h"
添加变量:
CSize sizeTotal;//控制滚动条
intcount;//信息条数
CString m_data[1000];//信息存放
char Hostname[260];
char Hostaddress[20];//主机IP地址
SOCKET m_sock;
HANDLE m_hListenThread;//线程
BOOL m_bInitialized;//是否初始化
WSADATAWSAData;
BOOL flag;
SOCKADDR_IN saClnt;
int saClntLen;
BOOL Isconnect;//是否连接
3.在serverview.cpp中重载CServerView()构造器,创建并绑定嵌套字:
CServerView::CServerView()
{
// TODO: add construction code here
Isconnect=FALSE;
flag=FALSE;
sizeTotal.cy=350;
sizeTotal.cx=300;
m_hListenThread;
count=5;
int status;
WSADATA wsaData;
m_data[0]="initializing Windows Sockets DLL....";
if((status=WSAStartup(0x0101,&wsaData))==0)
{
m_data[0]+="Succeeded";
m_bInitialized=TRUE;
}
else
{
m_bInitialized=FALSE;
}
m_sock=socket(AF_INET,SOCK_DGRAM,0);
m_data[1]="Creating socket....";
if(m_sock==INVALID_SOCKET)
{
m_data[1]+="Failed";
}
m_data[1]+="Succeeded";
m_data[2]="Binding socket....";
sockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
sa.sin_port=htons(5050);
if(bind(m_sock,(PSOCKADDR)&sa,sizeof
(sa))==SOCKET_ERROR)
{
m_data[2]+="Failed";
closesocket(m_sock);
}
m_data[2]+="Succeeded";
m_data[3]="Creating listener thread....";
unsigned long idThread;
m_hListenThread=CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)Listen,(void *)
this,0,&idThread);
if(m_hListenThread)
{m_data[3]+="Succeeded";
m_data[4]+="Listening....";
}
else
m_data[4]+="Failed";
}
4.在析构函数中完成必需的清除操作:
CServerView::~CServerView()
{
if(m_bInitialized)
WSACleanup();
closesocket(m_sock);
if(m_hListenThread)
::TerminateThread(m_hListenThread,0);
}
5.定义接收和处理消息的线程:
long WINAPI Listen(CServerView *pView)
{
char msg[2000]="";
intnchar;
SOCKADDR_IN saClnt;
int saClntLen;
while(1)
{
saClntLen=sizeof(saClnt);
nchar=recvfrom(pView->m_sock,msg,1024,0,
(PSOCKADDR)&saClnt,&saClntLen);
if(nchar<0) { pView->m_data[pView->count++]+
="Error in recvfrom\n";
pView->InvalidateRect(NULL);
}
else
{
switch(msg[0])
{
case'A':
wsprintf(msg,"A: Client from %s
attached\n",inet_ntoa(saClnt.sin_addr));
pView->m_data[pView->count++]=msg;
pView->flag=TRUE;
pView->InvalidateRect(NULL);
pView->Isconnect=TRUE;
pView->saClnt=saClnt;
pView->saClntLen=saClntLen;
sendto(pView->m_sock,msg,1024,0,
(PSOCKADDR)&saClnt,saClntLen);
break;
case 'D':
wsprintf(msg,"D: Client form %s
detached\n",inet_ntoa(saClnt.sin_addr));
pView->m_data[pView->count++]=msg;
pView->flag=TRUE;
pView->InvalidateRect(NULL);
pView->Isconnect=FALSE;
sendto(pView->m_sock,msg,1024,0,
(PSOCKADDR)&saClnt,saClntLen);
break;
case 'R':
saClntLen=sizeof(saClnt);
pView->m_data[pView->count++]=msg;
pView->flag=TRUE;
pView->InvalidateRect(NULL);
break;
default:
break;
}
}
}
return(0);
}
antshome
2002-06-08
打赏
举报
回复
MSDN里有例子的啊
xuying
2002-06-08
打赏
举报
回复
去这里下载吧:
http://asp.6to23.com/vcprogram/source/source_right.asp
MFC网络编程源代码,vc网络编程,mfc socket编程,mfc tcp/ip聊天室
一个
网络实验,自己花了好多心机来
做
的网络编程 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,
程序
分为服务器端和用户端两部分 本实验是本人
做
的计算机网络课程设计,有mfc的CSocket编的..给大家分享下 ...
网络通信
程序
案例(基于VB)—案例2-简易聊天
程序
网络通信
程序
案例(基于VB)—案例2-简易聊天
程序
—贪吃的钊钊黑 指导老师:胡念青 一、任务描述 这是
一个
基于VB6.0实现的
简单
聊天
程序
,它可以实现在局域网中两台主机间的在线聊天。 二、实现效果 说明: 本
程序
的...
核心Java
程序
设计技术
更重要的是,这个
程序
应该学生独立思考后设想出的
一个
软件,每天坚持逐步把它
做
出来。当这个软件达到特定规模时,设计者才会真正领悟到
程序
设计的核心价值、各种技术的科学理性意义乃至
程序
设计的乐趣。 最后...
WinSock
网络通信
程序
设计入门
对于许多初学者来说,
网络通信
程序
的开发,普遍的
一个
现象就是觉得难以入手。许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其所以而不知起所以然。 同步方式...
简单
的TCP
程序
:服务器与客户端的
简单
通信
基础TCP
程序
:服务器与客户端的
简单
通信 编译环境:IDEA 2021 JDK: JDK11 编写TCP
程序
时,一般都会编写两个Demo,
一个
是服务器端,
一个
是客户端。二者想要通信需要用到Socket:套接字。套接字的作用类似于手机,两个...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章