代码看懂了不难,但是简单的代码从头到尾写出来也不容易。
写个TCP服务器&客户端。是从UDP改过来的,那费老劲了。
最开始listen出错,原来SOCK_DGRAM忘记修改为SOCK_STREAM了,
接着发现listen的端口不对,原来忘记bind了,
后面发现客户端发送数据服务端接收不到,再看代码,原来都没有accept/connect。
加上accept和connect,客户端提示成功了,但是服务端没有返回,查了半天,发现客户端忘记把SOCK_DGRAM修改为SOCK_STREAM了。
太弱了。
不过最终改了,写这个简单的程序,目的是为了验证下消息分帧的特点:
消息分帧
使用消息分帧机制,就可以保护消息只在一个边界内通过socket进行通信;这意味着如果客户机向服务器先发送100个字节,然后又发送50个字节。那么服务器就会在两次读取操作中分别读取到100个字节和50个字节。UDP也是这样进行操作,这对于面向消息的协议非常有益。
与此不同,TCP是按照字节流的方式进行操作。如果没有分帧机制,一端接收到的数据可能比另外一端发送的数据多或少(这会将一次写操作划分成多次操作,或者将多次写操作合并到一个读操作中)。这种行为需要在TCP之上进行操作的面向消息的协议可以在应用层中提供数据缓冲和消息分帧机制(这可能是一项复杂的任务)。
时间: 2024-10-13 09:14:19