基于TCP Socket的简单网络通信
2011-04-19 11:39
507 查看
本实例是一个基于TCP的简单通讯实例,分为服务器端和客户端,服务器端监听客户端的连接请求,客户端将信息发送给服务器端,而服务器端则回复客户端发送的信息以达到通讯测试:
服务器端代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SimpleTcpServer
{
class Program
{
static void Main(string[] args)
{
//接收到的数据
int receive;
//定义数据缓冲区
byte [] date=new byte[1024];
//设置终端连接,接收任意请求的IP地址客户终端
IPEndPoint MyIpEndpoint = new IPEndPoint(IPAddress.Any, 13000);
//新建一个服务器套接字
Socket MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定服务端套接字
MySocket.Bind(MyIpEndpoint);
//监听
MySocket.Listen(10);
Console.WriteLine("Waitting for a message from client!");
//获取客户端套接字
Socket Client = MySocket.Accept();
//获取客户端终点
IPEndPoint ClientEndPoint =(IPEndPoint)Client.RemoteEndPoint;
Console.WriteLine("Connect with {0} port {1}",ClientEndPoint.Address,ClientEndPoint.Port.ToString());
//将要发送到客户端的信息进行编码
date = Encoding.ASCII.GetBytes("Welcome to my Server");
//发送信息到客户端
Client.Send(date, date.Length, SocketFlags.None);
//如果接收的信息长度为0,则自动退出循环
while (true)
{
receive = Client.Receive(date);
if (receive==0)
{
break;
}
//接收到的字符
string ReceiveString = Encoding.UTF8.GetString(date, 0, receive);
Console.WriteLine(ReceiveString);
//发送信息到客户端
Client.Send(date, receive, SocketFlags.None);
}
Console.WriteLine("DisConnected with {0}", ClientEndPoint.Address);
Client.Close();
MySocket.Close();
}
}
}
客户端代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SimpleTcpClient
{
class Program
{
static void Main(string[] args)
{
//缓冲区大小
byte[] data=new byte[1024];
string Input, StringData;
int receive;
//设置连接终端
IPEndPoint MyIpEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13000);
//设置连接服务器的套接字
Socket MyServer=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//连接服务器
MyServer.Connect(MyIpEndpoint);
}
catch
{
Console.WriteLine("Fail to connect to the server!");
return;
}
//接收服务器端发来的信息
receive = MyServer.Receive(data);
//将发来的信息进行转码
StringData = Encoding.UTF8.GetString(data, 0, receive);
Console.WriteLine(StringData);
while (true)
{
//从客户端输入信息
Input = Console.ReadLine();
if (Input=="exit")
{
break;
}
//发送信息到服务端
MyServer.Send(Encoding.UTF8.GetBytes(Input));
//接收服务端的信息
receive = MyServer.Receive(data);
StringData = Encoding.UTF8.GetString(data, 0, receive);
Console.WriteLine("Server: {0}", StringData);
}
//释放资源
Console.WriteLine("Disneccted from Server!");
MyServer.Shutdown(SocketShutdown.Both);
MyServer.Close();
}
}
}
本实例是基于TCP协议的同步网络通讯,后面我们将继续学习基于TCP协议的异步网络通讯。同步网络通讯的优点是简单和易于理解,在通讯量不大的情况下,同步通讯的效率要高于异步通讯,但是同步通讯的缺点也是显而易见的。
服务器端代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SimpleTcpServer
{
class Program
{
static void Main(string[] args)
{
//接收到的数据
int receive;
//定义数据缓冲区
byte [] date=new byte[1024];
//设置终端连接,接收任意请求的IP地址客户终端
IPEndPoint MyIpEndpoint = new IPEndPoint(IPAddress.Any, 13000);
//新建一个服务器套接字
Socket MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定服务端套接字
MySocket.Bind(MyIpEndpoint);
//监听
MySocket.Listen(10);
Console.WriteLine("Waitting for a message from client!");
//获取客户端套接字
Socket Client = MySocket.Accept();
//获取客户端终点
IPEndPoint ClientEndPoint =(IPEndPoint)Client.RemoteEndPoint;
Console.WriteLine("Connect with {0} port {1}",ClientEndPoint.Address,ClientEndPoint.Port.ToString());
//将要发送到客户端的信息进行编码
date = Encoding.ASCII.GetBytes("Welcome to my Server");
//发送信息到客户端
Client.Send(date, date.Length, SocketFlags.None);
//如果接收的信息长度为0,则自动退出循环
while (true)
{
receive = Client.Receive(date);
if (receive==0)
{
break;
}
//接收到的字符
string ReceiveString = Encoding.UTF8.GetString(date, 0, receive);
Console.WriteLine(ReceiveString);
//发送信息到客户端
Client.Send(date, receive, SocketFlags.None);
}
Console.WriteLine("DisConnected with {0}", ClientEndPoint.Address);
Client.Close();
MySocket.Close();
}
}
}
客户端代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SimpleTcpClient
{
class Program
{
static void Main(string[] args)
{
//缓冲区大小
byte[] data=new byte[1024];
string Input, StringData;
int receive;
//设置连接终端
IPEndPoint MyIpEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13000);
//设置连接服务器的套接字
Socket MyServer=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
//连接服务器
MyServer.Connect(MyIpEndpoint);
}
catch
{
Console.WriteLine("Fail to connect to the server!");
return;
}
//接收服务器端发来的信息
receive = MyServer.Receive(data);
//将发来的信息进行转码
StringData = Encoding.UTF8.GetString(data, 0, receive);
Console.WriteLine(StringData);
while (true)
{
//从客户端输入信息
Input = Console.ReadLine();
if (Input=="exit")
{
break;
}
//发送信息到服务端
MyServer.Send(Encoding.UTF8.GetBytes(Input));
//接收服务端的信息
receive = MyServer.Receive(data);
StringData = Encoding.UTF8.GetString(data, 0, receive);
Console.WriteLine("Server: {0}", StringData);
}
//释放资源
Console.WriteLine("Disneccted from Server!");
MyServer.Shutdown(SocketShutdown.Both);
MyServer.Close();
}
}
}
本实例是基于TCP协议的同步网络通讯,后面我们将继续学习基于TCP协议的异步网络通讯。同步网络通讯的优点是简单和易于理解,在通讯量不大的情况下,同步通讯的效率要高于异步通讯,但是同步通讯的缺点也是显而易见的。
相关文章推荐
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- 基于linux简单的TCP/IP网络通信代码
- 基于TCP/IP的SOCKET接口实现网络通信
- Linux网络编程 - TCP Socket 简单练习:新进程辅助通信
- 实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用之案例分析
- java 基于TCP的Socket网络通信
- 基于tcp_socket通信的网络编程
- 超基础的网络编程02:基于TCP的Socket通信
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- linux下基于TCP简单的socket通信程序
- Linux网络编程之socket简单通信TCP--服务端代码
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- Linux网络编程之[基于socket通信的tcp协议的编程模型]
- 基于TCP/UDP的Socket网络通信系列之客户端与服务器的简单对话(三)
- 一个基于VB.net的异步Socket网络TCP通信可防止任意一端意外终止TCP连接的类,。
- 基于Tcp&UDP协议的简单Socket通信实例(JAVA)
- Python网络通信之socket模块(四)基于Tcp/Ip的TCP交互通信serve/client的编写过程
- 基于TCP的简单socket通信
- Java 基于TCP/IP 实现简单的 socket 通信
- java学习之路——基于TCP的Socket网络通信实例