服务器端代码如下: [STAThread]
static void Main()
{
videoSettingsManager vsm = new videoSettingsManager();
videoSettings vs = vsm.getVideoSettings();
// this.server_time = DateTime.Now.ToString();
int listenport = 0;
try
{
listenport = int.Parse(vs.EcSystemPort);//从配置文件中读取端口号
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
listener = new TcpListener(listenport);
listener.Start();
Thread s3 = new Thread(new ThreadStart(ServiceClient));
s3.Start();
} public static void ServiceClient()
{
// string recvStr = ""; while (true)
{
client = listener.Server.Accept();
Console.WriteLine("有客户端连接");
byte[] recvBytes = new byte[1024];
int i = client.Receive(recvBytes, recvBytes.Length, 0);
if (i > 0)
{
string recvStr = Encoding.Default.GetString(recvBytes, 0, i);
deviceinfo info = getXML(recvStr);//解析xml(数据库业务)
if (info.Type == "device")
{
devicemanager dm = new devicemanager();
if (info.Method == "getAllDevice")
{
System.Collections.Generic.List<device> arry = dm.getallDevice();
string xml = myXmlSerializer(arry);
client.Send(Encoding.UTF8.GetBytes(xml + "@"));
}
}
else if (info.Type == "user")
{
usermanager dm = new usermanager();//解析xml(数据库业务)
if (info.Method == "Login")
{
string check = dm.Login(info.DbPara1, info.DbPara2);
client.Send(Encoding.UTF8.GetBytes(check));
}
if (info.Method == "getallUser")
{
List<user> arry = dm.getallUser();
string xml = myXmlSerializer(arry);
client.Send(Encoding.UTF8.GetBytes(xml + "@"));
}
}
else if (info.Type == "ExitSys")
{
client.Close();
} }
//}
} }当客户端向服务器发送消息时,第一次可以收到,第二次发送消息的时候,服务器端接收不到,我并没有断开连接。。不知道什么问题,高手指教。偶是新手!!!!
static void Main()
{
videoSettingsManager vsm = new videoSettingsManager();
videoSettings vs = vsm.getVideoSettings();
// this.server_time = DateTime.Now.ToString();
int listenport = 0;
try
{
listenport = int.Parse(vs.EcSystemPort);//从配置文件中读取端口号
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
listener = new TcpListener(listenport);
listener.Start();
Thread s3 = new Thread(new ThreadStart(ServiceClient));
s3.Start();
} public static void ServiceClient()
{
// string recvStr = ""; while (true)
{
client = listener.Server.Accept();
Console.WriteLine("有客户端连接");
byte[] recvBytes = new byte[1024];
int i = client.Receive(recvBytes, recvBytes.Length, 0);
if (i > 0)
{
string recvStr = Encoding.Default.GetString(recvBytes, 0, i);
deviceinfo info = getXML(recvStr);//解析xml(数据库业务)
if (info.Type == "device")
{
devicemanager dm = new devicemanager();
if (info.Method == "getAllDevice")
{
System.Collections.Generic.List<device> arry = dm.getallDevice();
string xml = myXmlSerializer(arry);
client.Send(Encoding.UTF8.GetBytes(xml + "@"));
}
}
else if (info.Type == "user")
{
usermanager dm = new usermanager();//解析xml(数据库业务)
if (info.Method == "Login")
{
string check = dm.Login(info.DbPara1, info.DbPara2);
client.Send(Encoding.UTF8.GetBytes(check));
}
if (info.Method == "getallUser")
{
List<user> arry = dm.getallUser();
string xml = myXmlSerializer(arry);
client.Send(Encoding.UTF8.GetBytes(xml + "@"));
}
}
else if (info.Type == "ExitSys")
{
client.Close();
} }
//}
} }当客户端向服务器发送消息时,第一次可以收到,第二次发送消息的时候,服务器端接收不到,我并没有断开连接。。不知道什么问题,高手指教。偶是新手!!!!
解决方案 »
- 用什么代码代替下面代码并降低对CPU的占用率
- 如何在winform窗体中显示doc,xls文档,不是调用打开的那种?
- 求救? DropDownList的问题……
- 窗体应用程序中,写了两个类,类1中调用类2的方法,form1中调用类1的方法
- 大家来看看我的正则表达式判断时为什么一直是为FALSE,错在哪里??
- 有没有这种可能,.net 应用程序在执行前先检测有没有装了框架?
- 问一个magicAjax问题
- VS.NET与其它语言混合开发(如java,flash,vb等)
- 怎样实现窗口最小化时,窗口隐藏到托盘图标上?
- 如何获得记录表的总行数?
- 运行拖拽时如何判断鼠标在控件的边角上
- 怎么优化读取大数据量的文本插入数据库中?
---------------
client.Receive这个方法要循环接收每一次的信息,你这里只有监听的循环,而client只接收了一次。你的程序结构可能要改一下以便使用client的循环接收。
http://blog.csdn.net/lanwilliam/category/389493.aspx
可以参考我原来搜集的资料
那我应该怎么改呢,客户端要和服务器端交换,当客户端发送某条指令后,服务器根据指令返回信息。
偶不是搞c#的,以前没搞过socket。请交交我吧,急啊
你可以使用Accept到的Socket做为参数构建一个类,比如如下的语句:AcceptClient acs = new AcceptClient(m_ServerSocket.Accept());
acs.DoWork();
这个AcceptClient里有一个方法DoWork(),可以在这个方法里启动一个线程或就是一个循环,或使用BackgroundWorker开启一个异步方法来循环接收。如: public void DoWork()
{
m_backWorker = new BackgroundWorker();
m_backWorker.WorkerSupportsCancellation = true;
m_backWorker.DoWork += new DoWorkEventHandler(bw_DoWork);
m_backWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_backWorker_RunWorkerCompleted);
m_backWorker.RunWorkerAsync();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
do
{
if (this.m_backWorker.CancellationPending)
{
break;
}
SocketError se = SocketError.Success; byte[] buffer = new byte[m_BufferSize];
int bytes = 0;
try
{
bytes = this.m_Socket.Receive(buffer, 0, m_BufferSize, SocketFlags.None, out se);
}
catch
{
break;
}
if (se != SocketError.Success)
{
break;
} if (bytes == 0)
{
break;
}
}
while (true);
}