基于套接字的聊天程序设计内容摘要:
break。 } } else { break。 } } closesocket(sockConn)。 //关闭套接字 coutServer waiting:...endl。 } WSACleanup()。 return 0。 } 客户端设计 : include include iostream using namespace std。 include int main(int argc, char *argv[]) { const int DEFAULT_PORT = 5000。 WORD wVersionRequested。 WSADATA wsaData。 int err,iLen。 wVersionRequested=MAKEWORD( 2, 2 )。 err = WSAStartup( wVersionRequested, amp。 wsaData )。 if ( err != 0 ) { cout加载 WinSock失败。 return 0。 10 / 39 } //创建用于连接的套接字 SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0)。 if (sockClient == INVALID_SOCKET) { coutsocket() fail:WSAGetLastError()endl。 return 0。 } SOCKADDR_IN addrSrv。 //string ip。 char cip[20]=。 int port。 char type。 cout 服务器基本设置为 ip: 端口: 5000endl。 cout 是否从新设置: Y or Nendl。 cintype。 if(type==39。 Y39。 ) { coutIP:。 cincip。 //ip=cip。 cout端口:。 cinport。 = AF_INET。 = i_addr(cip)。 = htons(port)。 } else { = AF_INET。 = i_addr()。 = htons(DEFAULT_PORT)。 } err = connect(sockClient,(SOCKADDR*)amp。 addrSrv,sizeof(SOCKADDR))。 //请求连接服务器进程 if ( err == INVALID_SOCKET ) { coutconnect() fail:WSAGetLastError()endl。 return 0。 } 11 / 39 char sendBuf[1024],hostname[100]。 if (gethostname(hostname,100) != 0) //获取主机名称 strcpy(hostname,None)。 strcpy(sendBuf,hostname)。 strcat(sendBuf, have coned to you!)。 err = send(sockClient,sendBuf,strlen(sendBuf)+1,0)。 //发送数据 if (err == SOCKET_ERROR) { coutsend() fail:WSAGetLastError()endl。 return 0。 } char recvBuf[1024]。 iLen = recv(sockClient,recvBuf,1024,0)。 //接收数据 if (iLen == 0) return 0。 else if (iLen == SOCKET_ERROR) { coutrecv() fail:WSAGetLastError()endl。 return 0。 } else { recvBuf[iLen] = 39。 \039。 coutrecvBufendl。 } while(1) { char sendBuf[1024]。 cout请输入你要发送的消息,输入 E退出 endl。 cinsendBuf。 string str=sendBuf。 if((E)) { err = send(sockClient,sendBuf,strlen(sendBuf)+1,0)。 //发送数据 if (err == SOCKET_ERROR) { coutsend() fail:WSAGetLastError()endl。 return 0。 } } 12 / 39 else { break。 } char recvBuf[1024]。 iLen = recv(sockClient,recvBuf,1024,0)。 //接收数据 if (iLen == 0) return 0。 else if (iLen == SOCKET_ERROR) { coutrecv() fail:WSAGetLastError()endl。 return 0。 } else { recvBuf[iLen] = 39。 \039。 coutrecvBufendl。 } } closesocket(sockClient)。 //关闭套接字 WSACleanup()。 } 基于 UDP 的应用程序设计 : 服务端设计: CUDPSocket 类,该类主要负责启动套接字,并接受客户发来的数据和发送数据 下面给出该类的源代码 //// : 头文件 pragma once // CUDPSocket 命令目标 pragma once include // CUDPSocket 命令目标 13 / 39 class CUDPSocket : public CAsyncSocket { public: CUDPSocket()。 virtual ~CUDPSocket()。 public: virtual void OnSend(int nErrorCode)。 virtual void OnReceive(int nErrorCode)。 bool BindLocatePC(DWORD m_LocateIP,int m_LocatePort)。 bool SendToRemotePC(DWORD m_RemoteIP,int m_RemotePort,CString m_SendData)。 public: bool m_fConnected。 //标志变量 }。 // // : 实现文件 // include include include include // CUDPSocket CUDPSocket::CUDPSocket(void) { m_fConnected = false。 } CUDPSocket::~CUDPSocket(void) { } // CUDPSocket 成员 函数 //事件响应函数(当一个套接字已经准备好了,并可以利用 Send 函数去发送数据时,就可以调用该函数去处理相应的消息) void CUDPSocket::OnSend(int nErrorCode) { CCUDPServerDlg *pDl = CCUDPServerDlg::GetDialog()。 //pDlOnSend(nErrorCode)。 } 14 / 39 //事件响应函数(当一个套接字准备好了,并且可以利用 Receive 接收时,就可以去调用该函数去处理相应的消息) void CUDPSocket::OnReceive(int nErrorCode) { CCUDPServerDlg *pDl = CCUDPServerDlg::GetDialog()。 pDlOnReceive(nErrorCode)。 } //地址和端口绑定 bool CUDPSocket::BindLocatePC(DWORD m_LocateIP,int m_LocatePort) { in_addr tempAddr。 CString buf。 /* LPCTSTR 类型 L 表示 long指针 这是 为了兼容 Window。基于套接字的聊天程序设计
相关推荐
(论文) 9 第三章 基于 阈值的 图像 分割技术 当非灰度图像转换为灰度图像后,图像中各目标区域的灰度值会不一样,如果图像的灰度直方图具有明显的双峰值或多峰值特征 , 可以利用阈值化方法求取最佳阈值,然后对图像进行合理分割。 阈值分割 原理 阈值化图像 分割是一种最基本的图像分割方法,经过半个多世纪的研究,现已提取了大量的算法。 其基本原理就 是选取一个或多个处于灰度图像范围之中的灰度阈值
两时刻的偏差 ei1,ei2和前一次的输出值 ui1,这大大节约了内存和计算时间; (3)在进行手动-自动切换时,控制量冲击小,能够较平滑地过渡。 当执行机构需要的是控制量(例如驱动不仅电机)时,应采用增量式 PID 控制。 根据递推原理可得: 增量式 PID 控制算法: )))2()1(()()1(()1( 10 ke r r orke r r orkje r r
活需求。 与此同时,五星级酒店的入驻,为项目的人气和价值提升也提升也打下了坚定的基石。 因此我们的中控、监控变的尤为重要,而中控部作为一线管理部门肩负着林达海渔广场的安防、消防则成为重中之重。 我们的安防消防中控人员必须具有防患于未然的意识,在工作中勤于检查,随时发现问题,及时整改问题,做好各项防范措施。 我们部门圆满的完成了公司领导下发的各项任务,比较好的完成了与各部门的配合,及时的去执行
D A、 B、 C、 D、 1根据本讲,情绪的功能主要包括动机功能和( )。 A A、 B、 C、 D、 1根据本讲内容,下面哪个选项不属于情商的能力。 ( )。 D A、 B、 C、 D、 1工作方面压力的来源也是多方面的 ,本讲认为最主要的来源是( )。 A A、 B、 C、 D、 1根据本讲,( )是一种个人自我感到适应的人际网络。 A A、 B、 C、 D、
机构: (盖章) 签 收 人:(签名) 日 期: 年 月 日 说明: 本表由 施工单位填写。 作为 CB28的附表,一同流转,审批结算时用。 CB28 附表 2 已完工程量汇总表 (承包 [ ]量总 号) 合同名称: 合同编号: 致: (监理机构) 我方将本月已完工程量汇总如下,请贵方审核。 附件:工程计量报验单。 序号 项目名称 项目内容 单位 核准工程量 备注 施工单位:(盖章) 项目经理
和国安全生 产法》、《电力建设安全工作规程》、《电力建设文明施工规定及考核办法》《电力建设安全健康与环境管理工作规定》及业主有关安全文明施工及环境保护的规定、制度执行。 结合本工程的实际情况,制定如下目标: ① 杜绝轻伤及以上人身伤害事故; ② 杜绝重大机械设备损坏事故; ③ 杜绝重大火灾事故; ④ 杜绝重大交通事故; ⑤ 不发生重大职业健康安全卫生事故; ⑥ 不发生环境污染事故和重大垮塌事故;