Last active
October 12, 2019 00:42
-
-
Save peterthorsteinson/da0f9fa1e3c5aa96dee0ecd169f473cb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Here are two programs (client and server) that talk via tcp/ip over a socket connection. | |
1. Run the server side program first and note the ip address of the machine that it is running on. | |
2. Then run the client and enter the ip address of the server. | |
3. Finally enter a message and hit enter. The message is sent to the server, reversed, and then sent back to the client. | |
/////////////////// | |
// TCP Client | |
using System; | |
using System.Net.Sockets; | |
namespace TcpClient | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
Console.WriteLine("Tic-Tac-Toe TCP Client"); | |
Console.WriteLine("Enter server ip address: "); // 127.0.0.1 | |
string server = Console.ReadLine(); | |
Console.WriteLine("Enter message: "); | |
string message = Console.ReadLine(); | |
try | |
{ | |
// Create a TcpClient. | |
// Note, for this client to work you need to have a TcpServer | |
// connected to the same address as specified by the server, port | |
// combination. | |
Int32 port = 13000; | |
TcpClient client = new TcpClient(server, port); | |
// Translate the passed message into ASCII and store it as a Byte array. | |
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); | |
// Get a client stream for reading and writing. | |
// Stream stream = client.GetStream(); | |
NetworkStream stream = client.GetStream(); | |
// Send the message to the connected TcpServer. | |
stream.Write(data, 0, data.Length); | |
Console.WriteLine("Sent: {0}", message); | |
// Receive the TcpServer.response. | |
// Buffer to store the response bytes. | |
data = new Byte[256]; | |
// String to store the response ASCII representation. | |
String responseData = String.Empty; | |
// Read the first batch of the TcpServer response bytes. | |
Int32 bytes = stream.Read(data, 0, data.Length); | |
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); | |
Console.WriteLine("Received: {0}", responseData); | |
// Close everything. | |
stream.Close(); | |
client.Close(); | |
} | |
catch (ArgumentNullException e) | |
{ | |
Console.WriteLine("ArgumentNullException: {0}", e); | |
} | |
catch (SocketException e) | |
{ | |
Console.WriteLine("SocketException: {0}", e); | |
} | |
Console.WriteLine("\n Press Enter to continue..."); | |
Console.Read(); | |
} | |
} | |
} | |
/////////////////// | |
// TCP Server | |
using System; | |
using System.Net; | |
using System.Net.Sockets; | |
using System.Text; | |
namespace TicTacToeTcpListener | |
{ | |
class Program | |
{ | |
public static void Main() | |
{ | |
Console.WriteLine("Tic-Tac-Toe TCP Listener"); | |
TcpListener server = null; | |
try | |
{ | |
// Set the TcpListener on port 13000. | |
Int32 port = 13000; | |
IPAddress localAddr = IPAddress.Parse("127.0.0.1"); | |
// TcpListener server = new TcpListener(port); | |
server = new TcpListener(localAddr, port); | |
// Start listening for client requests. | |
server.Start(); | |
// Buffer for reading data | |
Byte[] bytesInput = new Byte[256]; | |
String stringInput = null; | |
String stringOutput = null; | |
// Enter the listening loop. | |
while (true) | |
{ | |
Console.Write("Waiting for a connection... "); | |
// Perform a blocking call to accept requests. | |
// You could also user server.AcceptSocket() here. | |
TcpClient client = server.AcceptTcpClient(); | |
Console.WriteLine("Connected!"); | |
stringInput = null; | |
// Get a stream object for reading and writing | |
NetworkStream stream = client.GetStream(); | |
int i; | |
// Loop to receive all the data sent by the client. | |
while ((i = stream.Read(bytesInput, 0, bytesInput.Length)) != 0) | |
{ | |
// Translate data bytes to a ASCII string. | |
stringInput = System.Text.Encoding.ASCII.GetString(bytesInput, 0, i); | |
Console.WriteLine("Received: {0}", stringInput); | |
// Process the data sent by the client. | |
char[] charsInputOutput = stringInput.ToCharArray(); | |
Array.Reverse(charsInputOutput); | |
stringOutput = new String(charsInputOutput); | |
byte[] bytesOutput = System.Text.Encoding.ASCII.GetBytes(stringOutput); | |
// Send back a response. | |
stream.Write(bytesOutput, 0, bytesOutput.Length); | |
Console.WriteLine("Sent: {0}", stringOutput); | |
} | |
// Shutdown and end connection | |
client.Close(); | |
} | |
} | |
catch (SocketException e) | |
{ | |
Console.WriteLine("SocketException: {0}", e); | |
} | |
finally | |
{ | |
// Stop listening for new clients. | |
server.Stop(); | |
} | |
Console.WriteLine("\nHit enter to continue..."); | |
Console.Read(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment