说点题外话:这个知识点学过很久了,突然又拿出来的时候,就不那么熟练了。遂再写了一遍,眼下把总结写上来,方便以后自己查看
在windows下进行客户端与服务器之间的通讯。(一对一的采用TCP协议实现)
先说服务器端:
我创建了另外两个类CClient和CListening均继承于Csocket。其中CClient套接字是用来专门处理客户端发过来的请求。而CClient则是用于监听客户的请求。
在severDlg类里边的初始化函数里对端口号进行设置。
在启动按钮中启动服务器。实现方式如下描述:从编辑框获取端口号实现从字符串到整形数的转换。给本服务器在堆中创建监听套接字对象。根据端口号创建监听套接字,判断是否创建成功,成功则调用监听套接字额listen()建立套接字侦听即将到来的链接请求,否则弹出提示创建套接字失败。
在发送按钮中发送数据内容。实现方式如下描述:用一个临时的字符串变量缓存编辑框的文本内容,保存到发送缓冲区,调用客户端套接字的send()方法将缓冲区数据发送出去
当有连接到来的时候系统会通知监听套接字现在可以调用Accept成员函数来接受悬挂的连接请求,若是系统故障则报错,否则直接告诉服务器有连接到来,服务器套接字则会调用接受连接方法AcceptConnect(自定义的),此时为连接创建一个客户端套接字用来处理客户端的请求。一旦有接受缓冲区有数据到来系统就会通知客户端套接字取走缓冲区中的数据。此时服务器套接字会调用读数据的方法ReadData()(自定义的)来读取缓冲区的数据并显示在接收文本框中,在该方法中需要客户端套接字调用套接字的Receive()方法,这是专门用来将数据接收到缓冲区中的
接下来就是客户端:
在客户端只需要有一个客户端套接字用来处理接收数据
在ClientDlg类中最开始需要连接服务器,这放在一个按扭中去实现。实现的描述如下:
获取服务器IP和端口号。根据服务器IP和端口号创建连接采用客户端套接字调用套接字的连接方法,若是连接不成功并也不再继续连接则删除套接字
,将客户端套接字指针置空。
按下发送按钮之后的处理:获取编辑框的数据信息复制到缓冲区,之后调用套接字的发送方法将缓冲区数据发送出去。
当系统发现缓冲区中存在未被取走的数据时会通知客户端套接字,此时自动调用套接字的OnReceive()。在该方法中,客户端再调用自定义的Setdata() 方法。在该方法中客户端套接字会接收缓冲区中的数据,然后再显示在编辑框中。
可以再初始化的时候实际初始化Ip和端口号。再给客户端创建一个客户端套接字
需要说明的是在根据链接的IP和PORT创建套接字时的那个提示对话框的参数不甚明白了。。
以后再补充吧