socket同步通信,收到的数据无法进行字符串运算
socket同步通讯,收到的数据无法进行字符串运算?
最近做一个需要socket通讯的小东西,因为客户端少(24个以内),所以决定使用同步通讯。服务器端是这样的代码:
客户端代码:
最近做一个需要socket通讯的小东西,因为客户端少(24个以内),所以决定使用同步通讯。服务器端是这样的代码:
private void runServer ()
{
serverYLC = new Socket ( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
IPEndPoint localEP = new IPEndPoint ( ip, portYLC );
serverYLC.Bind ( localEP );
while ( true )
{
serverYLC.Listen ( 65535 );
Socket client = serverYLC.Accept ();
IPEndPoint remoEP = ( IPEndPoint ) client.RemoteEndPoint;
//记录用户ip列表
ClientIPYLC.Add ( remoEP.Address.ToString (), client );
BeginInvoke ( ( ThreadStart ) delegate
{
lYLC.Items.Add ( remoEP.Address.ToString () );
} );
Thread clientThread = new Thread ( new ParameterizedThreadStart ( clientFun ) );
clientThread.IsBackground = true;
clientThread.Start ( client );
}
}
private void clientFun ( object obj )
{
Socket client = ( Socket ) obj;
IPEndPoint remoEP = ( IPEndPoint ) client.RemoteEndPoint;
byte[] buffer;
int re;
string str;
try
{
while ( client.Connected )
{
buffer = new byte[100];
re = client.Receive ( buffer );
if ( re == 0 )//无数据
{
continue;
}
str = Encoding.UTF8.GetString ( buffer );
string fk = str;
FileStream fs = new FileStream ( @"d:test.txt", FileMode.Append );
StreamWriter sw = new StreamWriter ( fs );
//开始写入
sw.WriteLine ( (fk.Trim() + "---" + DateTime.Now.ToString ( "HH:mm:ss.fff" )).Replace(" ","") );
//清空缓冲区
sw.Flush ();
//关闭流
sw.Close ();
fs.Close ();
sw.Dispose ();
fs.Dispose ();
BeginInvoke ( ( ThreadStart ) delegate
{
lockYLC = true;
tYLCS.Text = str;
mYLC += tYLCS.Text;
tYLCR.Text = mYLC;
lockYLC = false;
} );
}
}
catch
{
MessageBox.Show ( "YLCerr" );
disSocket ( remoEP.Address.ToString () );
}
}
客户端代码:
private void conServer ()
{
serverCon = new Socket( AddressFamily.InterNetwork , SocketType.Stream , ProtocolType.Tcp );
IPEndPoint serverEP = new IPEndPoint( ip , portYLC );
serverYLC.Connect( serverEP );
}
private void sendHSC ()
{
string str = "";
str += sb.ToString () + ",";
int i;
for ( i = 0; i < 19; i++ )
str += ( i % 2 == 0 ? "65.535" : "327.67" ) + ",";
str = str.SubString(0,str.Length-1);
byte[] BufferS = Encoding.UTF8.GetBytes ( "["+str+"]|" );
//发送该数组
try
{
serverCon.Send ( BufferS, BufferS.Length, SocketFlags.None );