您的位置:首页 > 其它

Socket通信简例

2015-12-29 15:47 232 查看
今天实践了Socket通信,不过是简单的控制台示例,在此做个笔记,希望可以帮到一些人,也希望抛砖引玉,得到大神的指点~

先说说Server端

1 . 确定端口及主机IP;

2 . 利用IP初始化IPAddress类型的实例;

3 . 利用端口及IPAddress类型的实例初始化IPEndPoint类的实例;

4 . 新建Socket对象,绑定IPEndPoint类的实例;

5 . Socket开始监听;

6 . 接收到Client端链接,建立新的Socket;

7 . 接收Client端消息;

8 . 返回给Client端消息;

9 . 关闭Step 6中Socket;

10 . 关闭Step 4中Socket;

View code:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.Net.Sockets;

namespace SocketTestServer

{

class Program

{

static void Main(string[] args)

{

//确定服务端端口及IP

int port = 2000;

string host = "127.0.0.1";

//利用IP创建IPAddress类型的实例

IPAddress ip = IPAddress.Parse(host);

//利用端口及IPAddress类型的实例创建IPEndPoint类的实例

IPEndPoint ipe = new IPEndPoint(ip, port);

//创建Socket对象

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//绑定IPEndPoint类的实例

s.Bind(ipe);

//Socket实例开始监听

s.Listen(0);

Console.WriteLine("Waiting Client connect Server!");

//接收到Client连接,为此连接建立新的Socket

Socket temp = s.Accept();//为新建连接创建新的socket

Console.WriteLine("Client Connected!");

while (true)

{

//接收Client端消息

string recvStr = "";

byte[] recvBytes = new byte[1024];

int bytes;

bytes = temp.Receive(recvBytes, recvBytes.Length, 0);

recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

Console.WriteLine("Server receive message : {0}", recvStr);

//当接收到Client端“exit”消息,则返回给Client端“Exit”消息,并关闭Server端Socket

if (recvStr.Equals("exit"))

{

Console.WriteLine("Client request close connect!");

string sendExitStr = "Exit";

byte[] bs_exit = Encoding.ASCII.GetBytes(sendExitStr);

temp.Send(bs_exit, bs_exit.Length, 0);

goto End;

}

//输入文字,返回给client端

Console.WriteLine("Input your message send to client!");

string sendStr = Console.ReadLine();

byte[] bs = Encoding.ASCII.GetBytes(sendStr);

temp.Send(bs, bs.Length, 0);

}

End:

{

//关闭Server端Socket

temp.Close();

s.Close();

Console.WriteLine("Socket Server closed!");

}

}

}

}

再来看Client端

1 . 确定端口及主机IP;

2 . 利用IP初始化IPAddress类型的实例;

3 . 利用端口及IPAddress类型的实例初始化IPEndPoint类的实例;

4 . 新建Socket对象;

5 . 向Server发送消息;

6 . 接收到Servert端返回的消息;

7 . 关闭Socket;

View code:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.Net.Sockets;

namespace SocketTestClient

{

class Program

{

static void Main(string[] args)

{

//确定Server端端口及IP

int port = 2000;

string host = "127.0.0.1";

//利用IP创建IPAddress类型的实例

IPAddress ip = IPAddress.Parse(host);

//利用端口及IPAddress类型的实例创建IPEndPoint类的实例

IPEndPoint ipe = new IPEndPoint(ip, port);

//创建socket并连接到服务器

Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Console.WriteLine("Client Conneting…");

c.Connect(ipe);

while (true)

{

///向Server发送信息

Console.WriteLine("Please input your message!");

string sendStr = Console.ReadLine();

byte[] bs = Encoding.ASCII.GetBytes(sendStr);

Console.WriteLine("Send Message");

c.Send(bs, bs.Length, 0);

///接受从Server返回的信息

string recvStr = "";

byte[] recvBytes = new byte[1024];

int bytes;

bytes = c.Receive(recvBytes, recvBytes.Length, 0);

recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

Console.WriteLine("Client get message : {0}", recvStr);

//如果Server返回“Exit”消息,则关闭Client端Socket

if (recvStr.Equals("Exit"))

{

Console.WriteLine("Socket Server closed , Client close now!");

goto End;

}

}

End:

{

//关闭Client端Socket

c.Close();

Console.WriteLine("Client closed!");

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: