C# 如何在一台服务器中创建多个客户端?
如何使用is代码创建多个客户端 program.csC# 如何在一台服务器中创建多个客户端?,c#,multithreading,synchronization,client-server,C#,Multithreading,Synchronization,Client Server,如何使用is代码创建多个客户端 program.cs class Program { static void Main(string[] args) { Server.ServerCode(5656); } } Client.cs class Client { public static void ClientCode() { //SOCKET CONNECTION //int Port
class Program
{
static void Main(string[] args)
{
Server.ServerCode(5656);
}
}
Client.cs
class Client
{
public static void ClientCode()
{
//SOCKET CONNECTION
//int Port = (int)port;
Console.WriteLine("......................CLIENT.........................");
TcpClient client = new TcpClient("127.0.01", 5656);
NetworkStream clientStream = client.GetStream();
StreamReader sr = new StreamReader(clientStream);
StreamWriter sw = new StreamWriter(clientStream);
sw.AutoFlush = true;
//CLOSING SOCKET
clientStream.Close();
client.Close();
Console.ReadLine();
}
}
我的服务器代码:
sereve.cs
class Server
{
public static void ServerCode(object port)
{
//SOCKET CONNECTION
int Port = (int)port;
Console.WriteLine("................SERVER RUNNING......................");
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), Port);
listener.Start();
while (true)
{
TcpClient serverSite = listener.AcceptTcpClient();
if (serverSite.Connected)
{
Thread c = new Thread((fileTransfer));
c.Start(serverSite);
}
}
}
public static void fileTransfer(object clients)
{
Console.WriteLine("new client");*/
TcpClient server = listener.AcceptTcpClient();//(TcpClient)clients;
NetworkStream serverStream = server.GetStream();
StreamReader sr = new StreamReader(serverStream);
StreamWriter sw = new StreamWriter(serverStream);
sw.AutoFlush = true;
//CHECKING USERNAME AND PASSWORD
Console.WriteLine("Connecting to Client... ");
string fromClient_u = sr.ReadLine();
Console.WriteLine("\n Username: " + fromClient_u);
string fromClient_p = sr.ReadLine();
Console.WriteLine("\n Password: *******");
if (fromClient_u == "Client1" && fromClient_p == "123456")
{
Console.WriteLine("\nClient has Successfully Loged In. ");
sw.WriteLine("Connection Complete... "); //msg1
sw.WriteLine("Successfully Connected to the Server."); //msg2
sw.WriteLine("Enter Some Informations for File Transfer..."); //msg3
}
//CLOSING SOCKET
serverStream.Close();
server.Close();
Console.ReadLine();
}
}
它不起作用。我希望第一个线程工作并结束,然后第二个线程开始。但这段代码会同时产生所有三种威胁。我的观点是,这段代码将创建多个客户端,它们将等待。当第一个客户端完成与服务器的工作后,第二个客户端将获得服务器连接 如果不提供服务器代码,就很难知道那里是否也存在问题。如果有助于进行比较,请参阅本文中关于如何进行比较的内容。该示例还允许任意数量的客户端,尽管它们必须作为独立进程而不是线程启动 要一次只运行一个客户端,您可以尝试按如下方式更改启动代码:
for (i = 0; i < 3; i++)
{
t[i].Start();
t[i].Join();
}
(i=0;i<3;i++)的
{
t[i].Start();
t[i].Join();
}
如果不提供服务器代码,很难知道那里是否也存在问题。如果有助于进行比较,请参阅本文中关于如何进行比较的内容。该示例还允许任意数量的客户端,尽管它们必须作为独立进程而不是线程启动
要一次只运行一个客户端,您可以尝试按如下方式更改启动代码:
for (i = 0; i < 3; i++)
{
t[i].Start();
t[i].Join();
}
(i=0;i<3;i++)的
{
t[i].Start();
t[i].Join();
}
听起来很简单,如果您想锁定进程直到客户端结束,然后启动下一个进程,只需循环并显式调用它:
for (i=0;i<3;i++)
{
Client.ClientCode();
}
for(i=0;i听起来很简单,如果您想锁定进程直到客户端结束,然后启动下一个进程,只需循环并显式调用它:
for (i=0;i<3;i++)
{
Client.ClientCode();
}
for(i=0;i请展开“on it not working”。你看到了什么错误?什么时候和做什么?锁(obje)的含义是什么?
?没有错误。但是当整个代码运行时,所有线程同时工作。我希望一个线程一次访问一个服务器。@我不知道锁(obje)的含义没错……我在互联网上看到过很多这样的代码……但我猜它并没有锁定任何客户端。@HamletHakobyanlock()
用于锁定多线程应用程序中的代码路径,以避免多个线程修改相同的值。这会使调用线程等待释放。请展开“在其不工作时”。你看到了什么错误?什么时候和做什么?锁(obje)
的含义是什么?没有错误。但是当整个代码运行时,所有线程同时工作。我希望一个线程一次访问一个服务器。@BLUENT我不知道锁(obje)的含义没错……我在互联网上看到了很多这样的代码……但我猜它并没有锁定任何客户机。@HamletHakobyanlock()
用于锁定多线程应用程序中的代码路径,以避免多个线程修改相同的值。这会使调用线程等待发布。我想现在添加服务器代码。如何添加。代码太大,无法放在评论框中。@Giliweed-您应该能够编辑原始帖子并将其添加到那里。哇!很有效,谢谢@MarcF@Giliweed-我的荣幸。你最终得到了哪种解决方案?如果他不想异步处理任何事情,我认为没有必要使用线程。我想现在添加我的服务器代码。如何添加它。代码对于注释框来说太大了。@Giliweed-你应该能够编辑你的原始帖子并添加它好了,哇!真管用。谢谢@MarcF@Giliweed-我的荣幸。你最终得到了哪种解决方案?如果他不想异步处理任何事情,我认为没有必要使用线程。这也很有效…..哇!非常感谢。@Mt.Scheniders这也很有效…..哇!非常感谢。@Mt.Scheniders