/ We have to set the callback here even though
the new socket is unknown conn->socket is marked as -1 /
newconn = netconn_alloc(conn->type, conn->callback);
if (newconn == NULL) {
return ERR_MEM;
}
这里返回的 ERR_MEM 导致后面的问题,也就是内存分配出问题了。
到 netconn_alloc() 函数中发现 MEMP_NETCONN 好像没有定义。。。一直收的那个就不要写输入的代码了,直接无限读取就可以。
一直发的那个就不要写输出的代码了,直接无限输入就可以;
当然如果想两个都想在服务器和客户端各种实现,那么加入多线程吧。一个线程只管输入,一个线程只管输出只要一端编写监听的代码就可以了。一旦连接建立,双方的发送和接收都是相同的。
TCP协议通信的步骤如下:
1、在服务器端需要建立一个监听套接字,然后在此套接字上等待连接,C#使用TcpListenerStart();
2、当连接建立后,则需要创建一个新的套接字用于通信,C#使用TcpListenerAcceptSocket()获得通信用的套接字,或者使用TcpListenerAcceptTcpClient()获得TcpClient对象。
3、客户端在创建套接字后,就可以创建连接进行通信了,C#可以使用TcpClient对象完成。
你可以这样考虑:服务器端一开始需要监听,但一旦连接建立,你就得到一个TcpClient用于发送和接收数据,同时客户端也得到一个TcpClient用于发送和接收数据,很显然接下来的工作客户端和服务端就没有区别了。基于tcp编写的服务器可以用循环的方式实现多个客户端的连接。根据查询相关公开资料,基于TCP的服务器可以用循环来实现多个客户端的连接,这样,当有新的客户端连接到服务器时,服务器就可以不停地检测连接,及时将新连接加入到客户端列表中。此外,服务器可以使用某种数据结构(如队列)来存储客户端的连接。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)