客户端:
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;public class datatimeclient { public static void Main(String[] args) { TcpClient tcpc = new TcpClient();
Byte[] read = new Byte[32]; if (args.Length != 1){
Console.WriteLine("Please input a server name in the command line");
return;
}
String server = args[0]; if (Dns.GetHostByName(server) == null) {
Console.WriteLine("Cannot find server: {0}", server);
return;
}
tcpc.Connect(server, 6789);
Stream s;
try {
s = tcpc.GetStream();
} catch (InvalidOperationException) {
Console.WriteLine("Cannot connect to server: {0}", server);
return;
} int bytes = s.Read(read, 0, read.Length);
String Time = Encoding.ASCII.GetString(read); Console.WriteLine("Received {0} bytes", bytes);
Console.WriteLine("Current date and time is: {0}", Time); tcpc.Close(); Console.WriteLine("Press Return to exit");
Console.ReadLine();
}
}服务端:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;public class datatimeserver{ public static void Main(){ DateTime now;
String strDateLine;
Encoding ASCII = Encoding.ASCII;
    try{
TcpListener tcpl = new TcpListener(6789);
tcpl.Start();
Console.WriteLine("Server start");
Console.WriteLine("Waiting for clients to connect"); while (true) {
Socket s = tcpl.AcceptSocket();
now = DateTime.Now;
strDateLine = now.ToShortDateString() + " " + now.ToLongTimeString();
Byte[] byteDateLine = ASCII.GetBytes(strDateLine.ToCharArray());
s.Send(byteDateLine, byteDateLine.Length, 0);
s.Close();
Console.WriteLine("Sent {0}", strDateLine);
}
    }
    catch (SocketException socketError){
Console.WriteLine(socketError);
}
}
}客户端执行时要带参数,就是服务端程序运行所在的机器名字。
试一试,不行的话,再发信息。

解决方案 »

  1.   

    try {
    getByteLen = mySock.Receive(recvBytes,cls_Const.sockBuffer,0);
    }
    catch(SocketException ex) {
    if (ex.ErrorCode == 10054 || ex.ErrorCode == 10060) {
    break;
    }
    else{
    MessageBoxs.Show(ex.Message.ToString() + "\nErrorCode: " + ex.ErrorCode);
    break;
    }
    }
    catch(Exception ex){
    MessageBoxs.Show(ex.Message.ToString());
    break;
    }if (getByteLen < 1){
    break;
    }另外,要注意设置:sockServer.SetSocketOption(
    SocketOptionLevel.Socket,
    SocketOptionName.ReceiveTimeout,
    180 * 1000
    );

    sockServer.SetSocketOption(
    SocketOptionLevel.Socket,
    SocketOptionName.SendTimeout,
    180 * 1000
    );更多可参见:http://expert.csdn.net/Expert/TopicView1.asp?id=1908930