TCP Socket 同步问题。。
public void TcpThread()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
ReceIpEp = new IPEndPoint(ipAddress, this.port);
socket.Bind(ReceIpEp);
socket.Listen(0);
while (true)
{
Socket connection = socket.Accept();
CConnection conn = new CConnection(connection);
gpsConnection.Frmgps = this.frmgps;
Thread thread = new Thread(new ThreadStart(gpsConnection.WaitForSendData));
thread.Name = connection.RemoteEndPoint.ToString();
thread.Start();
}
}
以上的线程函数在一个类中,用于接收TCP连接。CConnection类用于每一个TCP连接的数据收发,
并且每一个TCP连接都专门开启一个线程。
Class CConnection
{
private Socket connSocket
public void CConnection(Socket conn)
{
this.connSocket=conn
}
public void WaitForSendData()
{
while (true)
{
bytes = new byte[1024];
this.connSocket.Blocking = true;
int bytesLength = this.connSocket.Receive(bytes);
........
}
}
}
现在的问题是,,每次连接来的时候创建CConnection conn对象传入Socket,并开起一个线程。
1,每次创建CConnection conn会不会覆盖之前创建的CConnection conn对象?不
2,每个线程,public void WaitForSendData()访问的是同一个对象引用么?
3,这种情况下需要同步么,如何同步?
4,CConnection类中还有很多其他字段,那么每个线程访问的是不同的对象的字段还是同一个对象的字段?
问题问的很乱,因为对于这块的理解很乱,希望大家能够看的明白。。也希望能让我也明白
不晓得这个算不算是对同一代码块的访问,,但是每个线程都在不同的对象中。。