C# - Handling Client/server Communications Over TCP?
May 25, 2011
I'm setting up a basic TCP client/server system and I'm wondering how the back-and-forth communication should ideally work. In my specific situation, the client will have to submit login credentials, and make specific requests from the server (the server interacts with a remote database).Here is what I would THINK to do.. and I'm just looking from input from other devs.
SERVER: Wait for new connections
CLIENT: Connects to server
CLIENT: Once connected, send login credentials with an instruction code.
[code]....
And another scenario.. let's say the client wants to request a log of what's happened on the server recently (the text of a console application window).
CLIENT: Send request message to server for recent log
i.e. $REQ$,105
SERVER: If instruction = $REQ$ and request id = 105, get window text and send to client
i.e. $DATA$,105,<data here>
CLIENT: If instruction = $DATA$ and data id = 105, parse data and display to user
The data being requested could be plain text, or a .net datatable translated into XML, etc. It could be a variety of things.
The problem I have is: When I click on cmdListen in the server form and cmdConnect in the client form,both programs won't respond and they crash for some reason I don't know.
Client source code:
Code:
Imports System.Net.Sockets Imports System.Text Public Class Form1
[CODE]...
Code: Imports System.Net.Sockets Imports System.Text Public Class Form1
I have been searching far and wide for knowledge regarding how to make a server program with a client program.Think like Msn ( Messenger ) You have the client and you send a message which is then send through the client to the server, and then to some other client (a friend might be ).I want to make a semilar program where ill make the server and the client myself, i just need a hint or two to get started.
I have started to learn how to use the TcpListener class to create a server/client chat facility, But im having some issues as to how to perform this at the moment i have the following code for the server.
Dim counter As Integer serverSocket.Start() ListBox1.Items.Add("Server Started!") counter = 0 While (True)
[Code]...
Client Accepted (I understand would most likely need a new thread for each client who is accepted, Once accepted , Return to the main loop to check for more clients.) No Client Connecting I understand that this may have to be done in a thread but ive not looked into using a seperate thread for this to infinitely run.
Developing an application that will serve as an application server (Similar to 'Run Advertised Program' that is present in Windows Server). The downside to using Microsofts current system is that it a) requires Windows Server and b) Works only with systems setup in a proper Domain. I have a number of systems in my house and I'm fed up of downloading from the net or setting up network drives etc etc. I've tried using the code in a similar topic posted a few threads down, but it obviously doesn't support multiple client connections.
Well first off let me say I am not sure if this should be in network or game programing but I think network programing is more relevant.
Anyway
I am creating my first game that runs over a network and so far everything is working. I have a server program, the clients can connect and see each other flying around. (weeeee)
However I have hit a wall when trying to make them shoot. The most easy way I can think to do this, is to have the client tell the server �hay i need a bullet pointing at x angle moving at y speed� the server then spawns a bullet entity then sends a spawn entity packet to all the clients. The main problem I see with this, is that the clients gun will have a delay based on latency.(funValue -= 1000)
The only other way I can think to do this, is to have some fake bullets spawn on the client but when the client gets the spawn bullet packet from the server, I am not sure how to keep track of what fake bullets to delete.
After three days research, I'm having trouble finding a simple sample app that will work as a server and wait for an ethernet connection request. When it gets one, it should complete the connection, then wait for another connection request.
Anyone has a quick and dirty sample coding to making this work? Currently, I have server, client with Interface object as intermediate object between the 2. If I declare events in the Interface, then Dim object on client side with "WithEvents", I'll get error when I reach this line:
how to create a client/server... But I couldn't... I don't want anything fancy. Just want the client to send the server 4 numbers, depending on the user's choice; after that, the server would turn off the pc, restart it, etc. It all depends on the number received. Is there a rather "simple" way to do it? If it's not to much trouble you could use Atheist's example. (Btw I don't understand the code and, yes, I've checked on [URL])
Hey guys, I am trying to send data from client to server (encrypted) and the string sent from the client is not the same as recieved from the server. I've been killing my brain for hours to get this to work but I cant manage. Im converting everything to Base64 string.
Client:
Public Sub SendMessage(ByVal msg As String) Try SyncLock myclient.GetStream sw = New IO.StreamWriter(myclient.GetStream)
We are creating a Who wants to be a millionaire style game in VB. Our server is pulling information such as questions and answers from a Access Database and sending them to the contestants (Clients). All transfer of information is directly from the server to each client. One of the "Life Lines" we want to use is "Ask a friend", where one client is able to Instant message another client for a short time to get help on the question.
I didn't make this code but can someone explain to me how to add more than one client to communicate to add to this code?e.g 3 people to talk or is it not possible?
I have this code below for a client module, to allow the client to connect to multiple servers, though a IP list. The problem is that it is connecting ok to the servers, and it is sending messages to servers, but is not receiving messages FROM servers.
I've basically made a basic tcp server/client application. The thing is that I'm behind a router and so will be the other people that use my clients. I've had to use port-forwarding or the software "rinetd"to run quite a few applications online.
Let me explain: I'm on a lan network that connects to the internet. Whenever I want to host a server - for instance a basic ftp or http server. If I give my external IP to anyone, they won't be able to access my server. Even if I portforward, it doesnt work. I have to use rinetd here. For other applications, portforwarding works. I'm not sure how these things work at all.
Anyway, my issue now is that I have created this server/client application. I'm having serious doubts that if I run the server, I'll have to either a) portforward or use rinetd to get people to connect to my server. IF I need to portforward, that's fine. However, using rinetd would really suck... My 2nd concern is as follows: IF the person running the client is in a similar situation as me (i.e he's on a lan that has a router which connects to the net), will he have to portforward or use rinetd as well? If he portforwards that's fine. But I don't think I could get people to use rinetd.... Also, if there are more than 1 person on a lan trying to connect to my server, there is a big problem when they try to portforward: they will only be able to allocate one of their internal ip to that port, and the others won't be able to connect, right? How does this work? I mean, I use many softwares like msn/skype/(some games)/firefox that do not need portforwarding/rinetd. Yet they work. My housemates(other people on the lan) use the same softwares, and it works fine. There's no clash/probs watsoever How come these run fine?
Anyway, back to my issues. Given I have no knowledge about how the above work, I was wondering whether there was a way to host a vb .net server application on an external website (external to my house) so that I might *avoid* the above mentioned problems, and to what extent that would be a sound solution.
i have made tcp connection to this webpage using tcpclienti can send commands like GET /Pagename.aspx to get the htmlnow is it possible that from webpage.aspx i can get the connected client stream and write to it and tcpclient gets that data ?
I have been reading through Atheists posts in regards to client-server and TCP client/server connection's. But how do i go about writing a program with 1 client and server where the client side creates a text file.Once the server sees there is a text file it connects and downloads it to itself or the client pushes the text file to the server.Once on the server i will read the text file and put its info into a sql db.
I am working on a client/server based application and I have run into quite a few snags stumbling my way through I have resolved quite a few issues, and need help with something new. I am using a TCPIP client/server and I find that at the end of each loop when I am reading the data from the network stream it appends a character to the end. I have tried removing the last character but I am not sure if it is getting the whole character successfully because I still get lots of different errors both in binary and xml deserialization whcih I think is related to this. Does anyone know the ascii code for the termination character for TCPServer/Client communications?
Im using the code from [URL] as a starter, most of the code is the same. the chat system works fine but on the client a added a disconnect button "clientSocket.Close()" and as soon as i click that i get errors, on the client, this is the code...
Private Sub getMessage() For infiniteCounter = 1 To 2
[CODE]...
And this line...
serverStream.Read(inStream, 0, buffSize) gives me "Unable to read data from the transport connection: A blocking operation was interrupted by a call to WSACancelBlockingCall."
Now im talking the server, after the client clicks disconnect or closes by task manager, looses connection, etc the server crashes and gives me.
I have created a Client that can send and receive data via TCP sockets. The objects stored on the serverside are the *exact* same object used for the client. They use the same send and receive protocols.
Now, when i send a string from the server to the client , it does precisely what it should do. However when I send a string to the server.... I do receive the string as an equal length of NULL characters. I run the server and client locally.
Basicly what can influence the behaviour between two completely identical objects performing the exact same task? I wonder if there is some socketflag issue if the TCPlistener.accept function returns a completely different setup then the one I R used to.
(if it is of any interest, the send protocol is asynchronious)
i have 2 application clinet/server the server broadcast media files to client i used tcp/ip protocol the server code is work good but i have a problem in client code i need ineed someone to correct the code .iwll show where the error is in the code note: i call the class in the main form dim a as recive in the starter of the main form class to be gloable .
This emailing code wont seem to work in my program. I get an exception "The SMTP server requires a secure connection or the client was not authenticated. The server response was 5.5.1 authentication required."
Imports System.Net.Mail Public Class emailStudent Private Sub sendEmailButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sendEmailButton.Click SendMail()
I wrote a VB code to call a sp in sql server 2005, which returns a recordset as follows:Dim objRecordset As ADODB.Recordset Set objComm = New ADODB.Command
Set objRecordset = objComm.Execute If Not objRecordset.BOF And Not objRecordset.EOF Then Set objRecordset = objRecordset.NextRecordset I need to continue to get next recordset since there are many select statements inside the sp which I need to get the data. The code works fine when I create the DSN using SQL Server but it does not work when using the connection string or SQL Server Native Client DSN. It either breaks at Set objRecordset = objComm.Execute ( connection string )or at If Not objRecordset.BOF And Not objRecordset.EOF Then(SQL native client )
I have worked on this for a couple of days now and could not figure it out.Is this a bug in SQL Native Client or something related to some configuration on the database side? IS there a way I can change the connection property to get this working using SQL native client or connection string?
I made a simple TCP server (I've found the example on the web) in VB to receive data from about 40 TCP clients.The clients are not synchronized but sends data about every 18 minutes; the problem is sometimes several clients sends data at the same moment, so I can't receive data.I also made a second program that reads the data (server program writes data on a file, read from the second program) scheduled.
My question is this: I've seen on the web examples about Multithreaded Server Socket Program, so I suppose this could manage my 40 clients (but now the clients are syncronized and send data at the same time in client mode) or is better get data (I have a central client that asks data to all 40 devices in server mode)?
Second question: can I make a single program where I run both TCP client and TCP server at the same time?
The &H30D? i know its a hexadecimal value and may represent a message but i cant find anything about why someone would need to use one, and not just "As Integer = 703". I've found nothing in the VB.NET library or windows messages/functions docs.
For my next project i'll have to create a TCP or UDP server based application. I know how to program a server but i am interested on the limitations of such servers.
how many connections a server may be able to handle at the same time. I suspect that this limitation is based on the type of transfer and how much data or how often it is send to the server.
I also read somewhere that a windows program is limited to 25 threads (connections) per core so if i would have a quad core i can have a maximum of 99 connections granted that the server itself is also a thread. Is that correct?
If the above is correct i wonder how to handle let's say 200 users at the same time. There must be some form / way to handle bigger request loads.