写的一个socket程序

今天调试的一个socket程序,主要实现的功能是客户端输入用户名和密码,然后服务器端显示出余额。这是参考书中的例子,自己补全了代码。自己调试的过程中还是膨大很多问题的。

下面是主要的头文件

其中winsock,pragma comment(lib,"wsock32“)是套接字必备的一个头文件,atlstr.h是为了不在MFC的情况下,使用CString。

其中我学到的就是在socket发送的数据中,比如传输用户名和密码。它的发送和接收机制是这样的,先发一个用户名的长度,再发用户名,再发密码长度,再发密码。

这样在接收端接收的时候,先接收第一个数据,(正是双方约定好了的),它包含了用户名长度,再从接收的数据中读取相应长度的数据。再读取下一个数据,它包含了密码的长度,再读取密码。

在代码中,它是这样实现的,首先创建了一个char型的指针name,为空。再创建len+1个char型内存空间(为最后加上0而多分配一个空间),然后就是读取接收到的数据。同样的道理创建一个char型的指针pass。同样的道理接收密码数据。

在代码中创建了空间就一定要再代码的最后释放数据。

 

在项目属性里面如果字符集选用的是“使用 Unicode 字符集” 那么编译器在编译下面这行代码的时候很有可能出错,并且查起来很费劲,很郁闷

这是因为编译器默认给CString类型的是WCHAR类型,而buff指针是char型的。因此在这里就需要把项目属性里——常规——字符集选为使用多字节字符集。

 

这个代码的缺点是只能查一个用户的余额,不能查多用户的。自己水平,刚开始,加强锻炼。

 

客户端的代码,简单起见,只写上了connect部分和send部分的代码

其中今天费了好大劲,实现了能自己输入用户名和密码。在代码中如果直接设置CString cuser;而不赋值,在运用cin,cin.get,cin.getline这些时都不管用,很郁闷,最后自己只能是先确定了一个char类型的数组或者是指针,然后给这个char类型的变量赋值,再由这个char类型的变量赋值给Cstring类型的变量。

send完用户名和密码之后,则等待服务器的反馈,如果是正确则会显示“your account left is 1W”,如果不正确则会显示相应的信息。

 

完整的代码在自己的邮箱中,名字为exam_1和exam_2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值