Socket通信

it2026-08-20  9

socket代表了一种文件描述符,而这里这个描述符则是用于描述网络访问的。什么意思呢?就是程序员可以通过socket来发送和接收网络上的数据。你也可以理解成是一个API。有了它,你就不用直接去操作网卡了,而是通过这个接口,这样就省了很多复杂的操作。

神马是Socket?我们可以通过一个生活中的场景来理解:假如你要打电话给一个朋友,拿起电话先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。

等到你们的交流结束,挂断电话以结束此次交谈。So,这里的电话就是一个Socket,你打电话相当于申请了一个Socket,告诉了Socket你要打给谁(对方的电话号码你事先知道)。

然后,你和对方进行聊天通话,相当于在向Socket发送数据和从Socket接收数据。最后,通话结束后,一方挂掉电话则相当于关闭Socket,撤销连接。

  在计算机网络的连接过程中,客户端Socket一般会记录服务器主机的IP地址、端口号,然后向服务器端进行连接并发送和接受数据。

而服务器端开启一个监听的服务,则是相当于使用Socket指定监听的端口,然后等待客户端的连接,客户端连接后则产生一个会话。会话完成后,则关闭连接。

 

 

socket,用它来访问网络的基本条件:

a. 要确定本机的IP和端口,socket只有与某一IP和端口绑定,才能发挥强大的威力。b. 得有协议吧(否则谁认得你这发送到网络的是什么呀)。想要复杂的,我们可以自己来定协议。但是这个就不在这篇里提了,我这里介绍两种大家最熟悉不过的协议:TCP & UDP。

步骤: a. 建立一个套接字 b. 绑定本机的IP和端口 c. 如果是TCP,因为是面向连接的,所以要利用Listen(10)方法来监听网络上是否有人给自己发东西; 如果是UDP,因为是无连接的,所以来者不拒。 d. TCP情况下,如果监听到一个连接,就可以使用accept来接收这个连接,然后就可以利用Send/Receive来执行操作了 而UDP,则不需要accept, 直接使用SendTo/ReceiveFrom来执行操作。 e. 如果你不想继续发送和接收了,就不要浪费资源了。能close的就close吧

//Listen(10):同一时间最大链接数量

开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章TCP控制传输数据,负责发现传输的问题,一旦有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地,而IP是负责给因特网中的每一台电脑定义一个地址,以便传输。

 

 

==========================================================================================================服务器端:int port = 6000; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sSocket.Bind(ipe); sSocket.Listen(0); Console.WriteLine("监听已经打开,请等待"); //receive message Socket serverSocket = sSocket.Accept(); Console.WriteLine("连接已经建立"); string recStr = ""; byte[] recByte = new byte[4096]; int bytes = serverSocket.Receive(recByte, recByte.Length, 0); recStr += Encoding.ASCII.GetString(recByte, 0, bytes); //send message Console.WriteLine("服务器端获得信息:{0}", recStr); string sendStr = "send to client :hello"; byte[] sendByte = Encoding.ASCII.GetBytes(sendStr); serverSocket.Send(sendByte, sendByte.Length, 0); serverSocket.Close(); sSocket.Close();==========================================================================客户端

int port = 6000; string host = "127.0.0.1";//服务器端ip地址

IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port);

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(ipe);

//send message string sendStr = "send to server : hello,ni hao"; byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr); clientSocket.Send(sendBytes);

//receive message string recStr = ""; byte[] recBytes = new byte[4096]; int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0); recStr += Encoding.ASCII.GetString(recBytes, 0, bytes); Console.WriteLine(recStr);

clientSocket.Close();

 

上述服务器端和客户端建立通信,在互相发送一次信息后通信便结束,而在大家进行的项目中,这样的通信肯定满足不了需求。

 

出自:http://www.cnblogs.com/ysyn/p/3399351.html#3782819

转载于:https://www.cnblogs.com/ZkbFighting/p/7591792.html

相关资源:android socket通信实例程序
最新回复(0)