C++ socket 实参传递的两种写法
来源:互联网 发布:网络教学管理平台 编辑:程序博客网 时间:2024/06/14 19:27
第一个参数socket的参数是需要改变的,后面几个的值是不需要改变的第一种写法,用&函数定义BOOL InitSocket(SOCKET& s,u_short port,unsigned int msg,CString str_flag);函数实现/*InitSocket() 参数说明*参数1 套接字 如m_socket*参数2 套接字端口 如8000 *参数3 套接字标志 如UM_SOCK*/BOOL CGpsudpDlg::InitSocket(SOCKET& s,u_short port,unsigned int msg,CString str_flag) //套接字初始化{CString str; //create base station socket 10.10.10.119 : 8000s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0); if(INVALID_SOCKET == s) // if error{ str.Format("%s--%s",str_flag,"套接字创建失败!"); MessageBox(str); return FALSE;}SOCKADDR_IN addrSock; //address the struct of address addrSock.sin_family = AF_INET;addrSock.sin_port = htons(port);addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);int retval;//band the socket: connect the m_socket to addrSock retval=bind(s,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)); if(SOCKET_ERROR==retval){closesocket(s);str.Format("%s---%s",str_flag,"绑定失败!");MessageBox(str);return FALSE;} if(SOCKET_ERROR==WSAAsyncSelect(s,m_hWnd,msg,FD_READ)){ str.Format("%s---%s",str_flag,"注册失败!");MessageBox(str);return FALSE;}return TRUE;}函数引用InitSocket(base_socket,base_port,BASE_SOCK,base_socket_str)的参数为base_socket,引用时表示取base_socket的地址,所以可以改变base_socket的值 if(FALSE==InitSocket(base_socket,base_port,BASE_SOCK,base_socket_str)){date_str1.Format("%d-%d-%d %s",CTime::GetCurrentTime().GetYear(),CTime::GetCurrentTime().GetMonth(),CTime::GetCurrentTime().GetDay(),CTime::GetCurrentTime().Format("%I:%M:%S %p"));fp1=fopen("log.txt","at+");if (fp1==NULL){ return FALSE;}fp_str1="Socket初始化错误"; fprintf(fp1,"%s,%s\n",date_str1,fp_str1);fclose(fp1); return FALSE;}第二种方式,用*BOOL InitSocket(SOCKET* s,u_short port,unsigned int msg,CString str_flag);/*InitSocket() 参数说明*参数1 套接字 如m_socket*参数2 套接字端口 如8000 *参数3 套接字标志 如UM_SOCK*/下面对s进行了*s操作BOOL CGpsudpDlg::InitSocket(SOCKET* s,u_short port,unsigned int msg,CString str_flag) //套接字初始化{CString str; //create base station socket 10.10.10.119 : 8000*s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0); //parameter 2 means udp base stationif(INVALID_SOCKET == *s) // if error{str.Format("%s--%s",str_flag,"套接字创建失败!");MessageBox(str);return FALSE;}SOCKADDR_IN addrSock; //address the struct of address addrSock.sin_family = AF_INET;addrSock.sin_port = htons(port);addrSock.sin_addr.S_un.S_addr = htonl(INADDR_ANY);int retval;//band the socket: connect the m_socket to addrSock retval=bind(*s,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)); if(SOCKET_ERROR==retval){ closesocket(*s); str.Format("%s---%s",str_flag,"绑定失败!"); MessageBox(str); return FALSE;} if(SOCKET_ERROR==WSAAsyncSelect(*s,m_hWnd,msg,FD_READ)){ str.Format("%s---%s",str_flag,"注册失败!"); MessageBox(str); return FALSE;}return TRUE;}下面调用的时候用了&if(FALSE==InitSocket(&base_socket,base_port,BASE_SOCK,base_socket_str)){date_str1.Format("%d-%d-%d %s",CTime::GetCurrentTime().GetYear(),CTime::GetCurrentTime().GetMonth(),CTime::GetCurrentTime().GetDay(),CTime::GetCurrentTime().Format("%I:%M:%S %p"));fp1=fopen("log.txt","at+");if (fp1==NULL){return FALSE;}fp_str1="Socket初始化错误";fprintf(fp1,"%s,%s\n",date_str1,fp_str1);fclose(fp1); return FALSE;}效果如图
两种写法的原理是一样的,实现的效果也是一样的,如果有什么不对的地方,欢迎大家留言讨论~
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
阅读全文
0 0
- C++ socket 实参传递的两种写法
- C语言-实参到函数形参传递的理解
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- C/C++函数形参传实参时值传递、指针传递、引用传递的区别
- C语言函数的两种写法变种
- C语言中指针声明的两种写法
- [研究]引用实参的传递
- Java值传递和引用传递及形参实参的分析(实例对比c++)
- 形参和实参之间的三种传递方式
- 状态机的两种写法
- 状态机的两种写法
- 状态机的两种写法
- 状态机的两种写法
- 对象的两种写法
- 状态机的两种写法
- 有限状态机的两种写法
- 状态机的两种写法
- 状态机的两种写法
- 数据结构:二叉树
- windows下choco及mongodb的安装
- dos命令
- 什么产品里包含Teams
- 创建一颗最优二叉树(哈夫曼树)
- C++ socket 实参传递的两种写法
- jquery实现在鼠标点击处的炫酷效果
- 减法
- linux静态链接库与动态链接库的区别及动态库的创建
- 电话拦截器
- Codeforces Round #418 (Div. 2)C.An impassioned circulation of affection(暴力枚举)
- 图形与图像处理
- Tomcat运行报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- python的三个读read(),readline()和readlines()