关于socket编程的一点心得理解

       很明显,对于socket编程来说,需要涉及到,c/s模式。即需要一个服务器程序和一个客户端程序之间的通讯。在c#里面需要引用system.net  来引用socket类。引用system.net.sockets  来使用网络流 

      那么怎么来进行通讯呢?如果你使用的socket是以网络流的形式通讯的话,我们首先要实现一个握手的过程。相互能感知和锁定对方。这样才能进行数据交互。握手代码如下:

sever:

 //服务器侦听端口可预先指定(此处使用了最大端口值)
            //Any表示服务器应侦听所有网络接口上的客户活动
           private IPEndPoint IPP = new IPEndPoint(IPAddress.Any, 65535);//IPAddress.any可以换成本机ip地址
           private Socket  socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//构建socket的基本信息
            socket.Bind(IPP);//关联(绑定)节点
             socket.Listen(0);//0表示连接数量不限
             
              private Socket Clinet=socket.Accept();//实现握手的语句

Clinet:

 try
            {
                //textbox1.txt里面为,对方(服务器)ip地址,textbox2.text里面是一个端口号,这个与服务器上的端口号要保持一致
                IPP = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));
                
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPP);//实现握手的过程
             
          
            }
            catch
            {
                MessageBox.Show("无法与服务器通信");
            }

  单词socket的意思是插座的意思,我是这样去理解的,要想实现,两者通讯,我们需要在服务器的这一头,建立一个插座,soket_sever。当然这个socket里面需要包含本地服务器的相关信息(ip,port),否则就是一个没有用的插座。在客户机的这一边,我们需要构造另一个插座,socket_clinet。里面要包含对方的(ip,port)。由于socket_sever绑定了本地信息,一直处于监听状态,只要客户机上的socket_clinet能发出邀请,就实现了一次握手。  这样我们可以理解为,在这两个插座上我们连接了一条线(网络流)。这样我们就可以再上面进行数据的读写了。从而实现数据的交互。

至于如何在流上进行写数据,和读数据。就要用到另一个命名空间了

using system.Net.sockets;
NetworkStream nstream=new NetworkStream(clientSocket);//让这天线(流)连在客户的那个插头上
//实现以四个字节进行读取
byte[] datasize=new byte[4];
nstream.Read(datasize,0,4);
int size=BitConverter.ToInt32(datasize,0);
Byte[] message=new byte[size];
int dataleft=size;
while(dataleft>0){
int recv=nstream.Read(meassage,start,dataleft);
start+=recv;
dataleft-=recv;
}
//以四个字节进行写入
byte[] datasize=new byte[4];
datasize=BitConverter.GetBytes(i);//i是对方传过来的数据长度。
byte [] sendbytes=Encoding.Unicode.GetBytes(str);//str是待发送的字符串
NetworkStream nstream=new NetworkStream(clientSocket);
nstream.Write(datasize,0,4);//就是为了留出这么大的空间
nstream.Write(sendbytes,0,sendbytes.Length);//为了让上面留出的空间里,恰好写入这么内容.
nstream.Flush();


这就是我对近期初步接触,socket套接字,以及TCP/IP编程概念的理解。前期就是构造插座,实现握手,后期就是对网络流的读写操作了


转载于:https://my.oschina.net/RabbitXiao/blog/340304

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值