| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 708 人关注过本帖
标题:如何给窗体添加timer处理函数呢;socket程序出错了!
只看楼主 加入收藏
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:5 
如何给窗体添加timer处理函数呢;socket程序出错了!

#include<iostream>
using namespace std;
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")

void main()
{
const int DEFAULT_PROTOCOL=0;
WSADATA ws;
int i1=WSAStartup(MAKEWORD(2,2),&ws);
//cout<<ws.wVersion<<endl
//<<WINSOCK_VERSION<<endl;
if(i1==0)
cout<<"call wsastartup successful"<<endl;
else
cout<<"err wsastartup"<<endl;

SOCKET s=socket(AF_INET,SOCK_STREAM,DEFAULT_PROTOCOL);
if(s!=INVALID_SOCKET)
cout<<"call socket fuction successful"<<endl;
else
cout<<"err in create socket"<<endl;
sockaddr_in sin;
//sin.sin_addr.s_addr=inet_addr('172.16.7.37');
//my_addr.sin_addr.s_addr = inet_addr("192.168.18.7");

sin.sin_addr.s_addr = inet_addr("172.16.7.37");
sin.sin_family=AF_INET;
sin.sin_port=htons(8402);
bind(s,(sockaddr *) &sin,sizeof(sin));

int i2=listen(s,2);
if(i2==0)
cout<<"listening..."<<endl;
else
cout<<"err listen"<<endl;

SOCKET cs=socket(AF_INET,SOCK_STREAM,0);
if(cs!=INVALID_SOCKET)
cout<<"open client socket successfull"<<endl;
else
cout<<"open client socket err"<<endl;

int i3=connect(cs,(sockaddr *) &sin,sizeof(sin));
//bind(s,(sockaddr *) &sin,sizeof(sin));
if(i3==0)
cout<<"connected to server successfull"<<endl;
else
cout<<"can not connect to server"<<endl;
//connect(s,(sockaddr *) &sin,sizeof(sin));
char datas[10]="hello";
send(s,datas,2,0);
char datat[10]="0";
int i4=recv(cs,datat,2,0);
if(i4==10){
cout<<datas<<endl;
cout<<datat<<endl;
}
else
cout<<"recv err";
int i5=closesocket(s);
//int i6=closesocket(cs);
if(i5==0)
cout<<"close server socket succ";
}

结果怎么不输出?也不退出?

发个帖子还真难~~~~我换了七八个标题都不行,分号前面的也请告诉一下,怎么加?

搜索更多相关主题的帖子: socket timer 函数 窗体 
2006-05-29 12:46
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
得分:0 
没有人理我
2006-05-29 12:49
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
我运行没有问题,连接成功了,请lz检查下你的本机IP地址是否正确等其它问题
至于定时器,windows下一般用SetTimer,但是你的程序是console下的,而SetTimer是基于消息WM_TIMER机制的,不能在console下用,你可以自己创建一条线程自己来计算模拟

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-29 16:18
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
得分:0 

关键是现在我还是不太理解socket

客户端connect之后,服务器不应该accept么?我这个程序是评印象写出来的,照我的设想,应该输出hello才对啊

至于settimer,能不能给个步骤?怎么加入?这个程序可以改成用list输出的,没关系

谢谢斑竹

2006-05-29 17:57
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
如果你说为什么不输出hello的话,那是因为你send数据时是用s来send的,但是s是监听socket,并不是和客户端连接的socket,你应该再定义一个服务器端的端口acceptsocket,使得
acceptsocket = accept( s, NULL, NULL );
然后通过acceptsocket这个socket来给客户端发消息
至于SetTimer很容易用的,
定义一个定时回调函数:
[CODE]VOID CALLBACK MyTimerProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime)
{
}[/CODE]

然后在你要起定时器的地方调用
[CODE]SetTimer(hWnd, TIMER_ID, 1000, (TIMERPROC) MyTimerProc);[/CODE]
其中hWnd是窗口句柄,TIMER_ID是指定时器ID,1000指没过1秒调用回调函数,MyTimerProc就是回调函数啦
hWnd可以填NULL,详细的解说你去查msdn吧

[此贴子已经被作者于2006-5-30 9:09:57编辑过]


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-30 09:09
wimphy
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2005-12-1
收藏
得分:0 
OK啦

谢谢
2006-05-30 12:44
快速回复:如何给窗体添加timer处理函数呢;socket程序出错了!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021351 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved