- Home /
a question about Client/Server programming in Unity
Hello everyone! In my project, I need to connect a windows forms app to a unity server to send commond. But I met following problems:
I found that the network function in unity can not work here, so I chose .Net TcpClient/TcpServer. It worked, but when I loaded another scene, it stoped until I closed unity in task manager of windows. Do you met this situation before?If so, is it means that Using .Net Network function is not a good way for my program?
Then I try to program with Socket. It worked fine when loading new scene. But I found after connecting with server, the windows forms app cannot send massage successfully. The code that receive data in unity was started in a new thread and run in when(true). Is it a right way to wait the data? or Is there any better way to do that?
Please give me some advice if it is convenint. I will post my code when I am in my work place. So happy to discuss with you about programming in Unity.
Thank you very much!
I am not referring to the master server. I'm developing a game which need to connect with a external device ,such as iPad or mobile phone. The device can send commond to the game running on PC through network
I'd be guessing that you have attached your networking to some object that is being deleted when a new level is loaded. You could try marking that object with the networking code with DontDestroyOnLoad.
Waiting on another thread is fine as long as you sync back to the main thread to do something with the retrieved data. There's a Unity Gems article on threading which shows how to do that syncing.
Answer by Statement · Mar 08, 2013 at 03:19 PM
As whydoidoit commented (answered? :)), it is likely that your objects that receive the data got destroyed. Also you should be careful with threads. Unitys API is not thread safe for the a lot cases and you should take care to process Unity calls in the main thread - so you might need to perform some synchronization depending on what you're doing.
Sockets are expected to work. Please ensure that your objects aren't destroyed DontDestroyOnLoad(gameObject); is hopefully all you need to do. Threads are also supported, but it is easy to make mistakes, accessing Unity from a user thread or callback thread for example.