C# TCP网络编程,文件上传完之后如何让服务端通知客户端已经收到。
主要是TCP在服务端和客户端通讯未中断前,如何做让服务端发送消息给客户端?
大文件上传我已经用分包循环发送。但是这个发送消息实在是没弄明白原理,请大家帮忙帮忙指点一下!
以下是我手动打上来的字如果错了自行脑补TCP/IP协议:我给您贴一段百度百科的话
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。
TCP/IP通常被人誉为:双向连接协议,传输木有UDP快如果说你不知道如何使用就基本等于你没有理解:双向连接协议你把TCP/IP当作TCP或者UDP使用了就算是TCP也有一个上传失败的说法(UDP完全木有)那么嗯呵呵不掉你胃口了说正事唉今天属下请假好多无聊滴
来咱们看看通信的代码
tcpClientSend(new byte[] { });//在这里发送吧对吧~
TcpListener tcpl = new TcpListener(1234);
tcplAcceptSocket();//这里就能获取到一个客户连接了对吧
OKOK
那么还不简单tcpClientSend(newbyte[] { });//在这里发送吧对吧~这句上传文件
tcplAcceptSocket();//这里就能获取到一个客户连接了对吧
这里换个思路
clientSocketSend(new byte[] { });//这里就是服务器给客户端发消息了
OKOK
那么客户端怎么接收
这个我不想你告诉我你的客户端是同步上传而不是异步如果你知道什么是异步
异步接收异步发送解决
tcpClientSendAsync(new SocketAsyncEventArgs());//异步发送
再不知道嗯我也不知道怎么给你说了
见TCP流量分析篇TCP 流量分析 - (jianshucom)
使用一台windows主机作为TCP Server,使用一台Linux作为TCP Client,发起TCP连接,发送数据,结束连接。
以下Python脚本通过Socket实现TCP Server端,接收TCP连接。
以下Python脚本通过Scapy实现TCP Client端,向Server端发起TCP连接。
首先在Windows主机上运行TCP Server脚本。
在linux主机上运行TCP Client脚本后,会将TCP交互过程打印出来。
通过科来的csna抓包,并追踪TCP流,如下为交互的数据包这个无状态跟面向连接没关系吧
>相较于select函数的epoll函数的特点:
条件触发:只要输入缓冲有数据就会一直通知该事件。比如,读取了一半剩了一半,会再次注册事件。
客户端基于第四章的echo_clientc做了适当修改,以接受全从服务器端返回的数据。
边缘触发:仅注册一次该事件。即使输入缓冲中还有数据,也不会再注册。
将套接字改为非阻塞方式:
[1] Github你的意思我差不多明白了,现在我跟你说下那个两个人猜拳的一个思路
服务端是可以查看客户端连接情况的
你可以在客户端弄一个Map 用服务端的IP 作为键 , 发送的消息作为值存放
客户端发送消息后就存放在Map里面
当服务端接收到两边客户端都有传入消息,就根据IP 取出值来比较
然后将结果返回给客户端
其实那个多人聊天,需要所有人发言后才会公布广播的,也可以按照这个思路去做
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)