C#写的Socket Server 和Client
主 题: C#写的Socket Server 和Client
作 者: tony_jin (金)
等 级: ^
信 誉 值: 97
所属社区: .NET技术 C#
问题点数: 100
回复次数: 7
发表时间: 2004-11-26 13:14:58
该如何写啊?最好有现成的源代码使用,时间太急
回复人: Lastcsdner(外行) ( 二级(初级)) 信誉:100 2004-11-26 13:13:00 得分: 0
懒,当初我写这个东西什么都不知道也就花半天就写好了。
给你点建议吧:客户端使用TCPClient,如果需要操作裸SOCKET就继承一下;
服务端给你一点代码吧:
IPAddress localAddr = IPAddress.Parse("0.0.0.0");
TcpListener server = new TcpListener(localAddr, _port);
server.Start();
while (running)
{
if (server.Pending())
{
_sockQueue.Enqueue(new SocketHandle(server.AcceptSocket()));
}
else
{
Thread.Sleep(10);
}
}
server.Stop();
回复人: coffeenight(留恋咖啡) ( 一级(初级)) 信誉:100 2004-11-26 13:25:00 得分: 0
only these code?
回复人: huqiyang(养猪专业户) ( 二级(初级)) 信誉:100 2004-11-26 13:31:00 得分: 0
bs
回复人: sidshen(阿布) ( 一级(初级)) 信誉:100 2004-11-26 13:33:00 得分: 0
以下是我刚开始用socket时写的一个服务器端,希望有点儿用,当初是是用来接收sms上行用的
using System;
using System.Net.Sockets;
using System.Text;
public class TcpTimeServer
{
private const int portNum = 9901;
public static int Main(String[] args)
{
bool done = false;
TcpListener listener = new TcpListener(portNum);
listener.Start();
Console.WriteLine("....................");
Console.WriteLine("....开始监听端口....");
Console.WriteLine("....................");
while (!done)
{
Console.Write("Waiting for connection...");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Connection accepted.");
NetworkStream ns = client.GetStream();
try
{
byte[] bytes = new byte[1024];
int bytesRead = ns.Read(bytes, 0, bytes.Length);
Console.WriteLine(".......................接受到的信息..........................");
string MOMsg = Encoding.Default.GetString(bytes, 0, bytesRead);
Console.WriteLine(MOMsg);
//MO objMO=new MO(MOMsg);
//Console.WriteLine("---------");
//Console.WriteLine("Msg_type="+objMO.Msg_type);
//Console.WriteLine("GWName="+objMO.GWName);
//Console.WriteLine("GWPassword="+objMO.GWPassword);
//Console.WriteLine("Srctermid="+objMO.Srctermid);
//Console.WriteLine("Dsttermid="+objMO.Dsttermid);
//Console.WriteLine("Msg="+objMO.Msg);
Console.WriteLine(".......................发送的返回正确的信息信息..........................");
//正确处理返回1
string RspMSG = "1";
Console.WriteLine(RspMSG);
bytes = Encoding.Default.GetBytes(RspMSG);
ns.Write(bytes, 0, bytes.Length);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine(".......................发送的返回错误的信息信息..........................");
//错误处理返回0
string RspMSG = "01";
byte[] bytes = Encoding.Default.GetBytes(RspMSG);
Console.WriteLine(RspMSG);
ns.Write(bytes, 0, bytes.Length);
}
finally
{
ns.Close();
client.Close();
}
}
listener.Stop();
return 0;
}
}
class MO
{
/// <summary>
/// 0状态报告 1 iod点播 最长1位
/// </summary>
public readonly string Msg_type;
/// <summary>
/// 连接名 最长10 位
/// </summary>
public readonly string GWName;
/// <summary>
/// 连接密码 最长10 位
/// </summary>
public readonly string GWPassword;
/// <summary>
/// 目的号码21位
/// </summary>
public readonly string Dsttermid;
/// <summary>
/// 源号码(上行的手机号码)
/// </summary>
public readonly string Srctermid;
/// <summary>
/// 消息体 150位
/// </summary>
public readonly string Msg;
public MO(string MOMsg)
{
Msg_type = MOMsg.Substring(0, 1).Trim();
GWName = MOMsg.Substring(1, 10).Trim();
GWPassword = MOMsg.Substring(11, 10).Trim();
Dsttermid = MOMsg.Substring(21, 21).Trim();
Srctermid = MOMsg.Substring(42, 21).Trim();
Msg = MOMsg.Substring(63).Trim();
}
}
回复人: xiaoxiao5020(小小) ( 一级(初级)) 信誉:100 2004-11-26 13:45:00 得分: 0
看着眼运了,真牛!
回复人: adailee(为了一棵树,我放弃了整个森林) ( 四级(中级)) 信誉:100 2004-11-27 15:52:00 得分: 0
悠着点,慢慢学。
回复人: flyinpiggy(猪猪) ( 一级(初级)) 信誉:100 2004-11-27 18:09:00 得分: 0
老是提示我太长了
请分开回复
楼主要的话给我邮箱
我发给你