如题:我想在我的bs结构程序中使用如上方法,不知道能不能做?
还有就是我现在在网上找了个关于以上编程的cs程序,但是由于自己从来都没接触过类似的功能,这次实属赶鸭子上架头一回,于是还有很多疑问!就是网上的例子大多都是一个客户端一个服务端,也就是1对1模式,如果我想做的是1个服务端多个(随着用户多少而定)客户端程序应该怎么做?
下面就是我的代码:(服务端程序如下)
static void Main(string[] args)
{
int port = 2000;//默认端口
//创建终结点(EndPoint)
IPAddress ip = System.Net.IPAddress.Any;//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例 //创建socket并开始监听
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(0);//开始监听
Console.WriteLine("等待客户端连接..."); //接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); //给client端返回信息
Console.WriteLine("客户端发来信息:{0}", recvStr);//把客户端传来的信息显示出来
string sendStr = "123";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);//返回信息给客户端
Console.WriteLine("发往客户端信息:{0}", sendStr);//把客户端传来的信息显示出来
temp.Close();
s.Close();
Console.ReadLine();
}
(客户端程序)
static void Main(string[] args)
{
try
{
int port = 2000;
string host = "127.0.0.1";
//创建终结点EndPoint
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例 //创建socket并连接到服务器
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
Console.WriteLine("连接中…");
c.Connect(ipe);//连接到服务器 //向服务器发送信息
string sendStr = Console.ReadLine();
byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
Console.WriteLine("Send Message:{0}", sendStr);
c.Send(bs, bs.Length, 0);//发送信息 //接受从服务器返回的信息
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("服务端出来信息:{0}", recvStr);//显示服务器返回信息
//一定记着用完socket后要关闭
c.Close();
Console.ReadLine();
//Console.ReadKey();
}
catch (ArgumentNullException e)
{
Console.WriteLine("argumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException:{0}", e);
}
Console.WriteLine("Press enter to Exit");
}
还有就是我现在在网上找了个关于以上编程的cs程序,但是由于自己从来都没接触过类似的功能,这次实属赶鸭子上架头一回,于是还有很多疑问!就是网上的例子大多都是一个客户端一个服务端,也就是1对1模式,如果我想做的是1个服务端多个(随着用户多少而定)客户端程序应该怎么做?
下面就是我的代码:(服务端程序如下)
static void Main(string[] args)
{
int port = 2000;//默认端口
//创建终结点(EndPoint)
IPAddress ip = System.Net.IPAddress.Any;//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例 //创建socket并开始监听
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(0);//开始监听
Console.WriteLine("等待客户端连接..."); //接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); //给client端返回信息
Console.WriteLine("客户端发来信息:{0}", recvStr);//把客户端传来的信息显示出来
string sendStr = "123";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);//返回信息给客户端
Console.WriteLine("发往客户端信息:{0}", sendStr);//把客户端传来的信息显示出来
temp.Close();
s.Close();
Console.ReadLine();
}
(客户端程序)
static void Main(string[] args)
{
try
{
int port = 2000;
string host = "127.0.0.1";
//创建终结点EndPoint
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例 //创建socket并连接到服务器
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
Console.WriteLine("连接中…");
c.Connect(ipe);//连接到服务器 //向服务器发送信息
string sendStr = Console.ReadLine();
byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
Console.WriteLine("Send Message:{0}", sendStr);
c.Send(bs, bs.Length, 0);//发送信息 //接受从服务器返回的信息
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("服务端出来信息:{0}", recvStr);//显示服务器返回信息
//一定记着用完socket后要关闭
c.Close();
Console.ReadLine();
//Console.ReadKey();
}
catch (ArgumentNullException e)
{
Console.WriteLine("argumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException:{0}", e);
}
Console.WriteLine("Press enter to Exit");
}
解决方案 »
- 如何在dictionary遍历时删除对应元素?
- DevExpress.XtraGrid.GridControl手动添加行的问题
- 技术问题!
- 关于combobox的问题,解决不了
- XBAP会不会取代asp.net?
- 简单的XML命名空间问题
- 安装卸载,开始菜单中的文件夹没有卸载,再次安装无访问权限。
- edrawings 2004 显示用intecad导出的CAD图,不能正确显示字体,请问字体应该怎么加啊
- C#中的类型转换问题·
- AxHost.InvalidActiveXStateException 是什么原因引起?
- wpf中的datagrid怎么在CellEditEnding事件中给编辑的单元格赋值?
- .net新手、、 什么是 动态 语言?
这是实情,网上的所谓范例甚至博客中的所谓“聊天”程序,大多是拿这类“作品”出来。使用.net开发大系统的门槛如此低,以至于许多假技术总监都从java转行.net了。不过使用asp.net创建所谓tcp服务是不恰当的。asp.net更应该作为一个应用客户端,比如一个asp.net网站去访问真正的企业服务器系统(而不是简单地访问本地关系数据库),来显示到网站上。想想asp.net网站架构就知道,asp.net网站随时可能重启(遇到千百种问题时)以自我维护网站的持续运行,并且asp.net网站并不在乎最高的响应速度而是在乎最高的吞吐速度(它不是提供给人像玩游戏一样的响应速度,而是提供给人茶余饭后欣赏内容的)。而一个真正的服务器系统是用来支持各种tcp、http、udp等等各传输话协议、以及各种业务应用协议。如果你要写一个服务器程序,就要让asp.net网站、vb的桌面程序、java的手机程序等等都能统一地访问它。
x.Connect(host, port);
var st = x.GetStream();
st.Write(sendDatas, 0, sendDatas.Length);
st.Flush();
var buffer=new byte[40960];
var len= st.Read(buffer, buffer.Length);然后buffer中前len个字节就是读取到的数据。当然,如果读取的结果会大于40k,那么应该是一个循环接收buffer内容并合并到一个大的buffer中。这没有什么技术含量,可以先去编程。