大家看下以下代码,下面代码应用在B/S环境中,用同步向服务端发送一个串,服务器接收到后,会根据接收到的内容返回一个串。如果不用异步,在多并发的情况下,会不会造成数据错误?(比如:A用户向服务端发送了信息,服务器还没有返回结果前,B用户又向服务端发送了信息,这时服务端会不会将B的结果返回呢?)
以前都是做B/S的,没用过Socket,不知Socket是不是也用Session区分用户? TcpClient tcpClient = new TcpClient();
tcpClient.Connect(System.Net.IPAddress.Parse(ServerAddr), ServerPort); NetworkStream netStream = tcpClient.GetStream(); Byte[] sendBytes = System.Text.Encoding.Default.GetBytes(dataStr);
netStream.Write(sendBytes, 0, sendBytes.Length);
byte[] bytes = new byte[tcpClient.ReceiveBufferSize]; netStream.Read(bytes, 0, (int)tcpClient.ReceiveBufferSize); returndata = System.Text.Encoding.Default.GetString(bytes);
以前都是做B/S的,没用过Socket,不知Socket是不是也用Session区分用户? TcpClient tcpClient = new TcpClient();
tcpClient.Connect(System.Net.IPAddress.Parse(ServerAddr), ServerPort); NetworkStream netStream = tcpClient.GetStream(); Byte[] sendBytes = System.Text.Encoding.Default.GetBytes(dataStr);
netStream.Write(sendBytes, 0, sendBytes.Length);
byte[] bytes = new byte[tcpClient.ReceiveBufferSize]; netStream.Read(bytes, 0, (int)tcpClient.ReceiveBufferSize); returndata = System.Text.Encoding.Default.GetString(bytes);
客户A--->服务--一般情况下 服务端会根据客户端的SOCKET成立个SOCKETA的实例 ..返回也是用SOCKETA这个实例返回数据..客户B无法生成是这个实例... .
“不管是同步还是异步,不同客户端的数据是不会混在一起的,这个问题你不用担心。”
----“不同客户端”该怎样理解呢?这段代码用在web服务器上,所以,虽然是不同浏览器的请求发送给web服务器,但都是同一台web服务器发送请求给Socket服务器,这种情况对于Socket服务器来讲算不算是不同客户端呢?
且不说上面的问题,只说客户端Socket与服务器的Socket通信问题。
一旦客户端的Socket与服务器上的Socket建立连接后就会形成一对一的连接。这时另一个Socket再和服务器上的Socket连接的时候就会建立另一个连接和原来的都没有关系,这可以通过查看服务器上的对应的Socket的端口不同看到。
因此除了你的程序有不合适的操作外不会形成错误的数据。