(转)C# Socket简单例子(服务器与客户端通信)

本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721

这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。

注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息边界问题、端口号是否被占用、消息命令的解析问题等。。

下面是两个程序的代码,(两个程序均为控制台程序)

先发服务端的(Server)完整代码如下:

引入命名空间:

[csharp] view plaincopyprint?

  1. using System.Net.Sockets;
  2. using System.Net;
  3. using System.Threading;

完整代码如下:

[csharp] view plaincopyprint?

  1. namespace SocketServer
  2. {
  3. class Program
  4. {
  5. private static byte[] result = new byte[1024];
  6. private static int myProt = 8885;   //端口
  7. static Socket serverSocket;
  8. static void Main(string[] args)
  9. {
  10. //服务器IP地址
  11. IPAddress ip = IPAddress.Parse("127.0.0.1");
  12. serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  13. serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口
  14. serverSocket.Listen(10);    //设定最多10个排队连接请求
  15. Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
  16. //通过Clientsoket发送数据
  17. Thread myThread = new Thread(ListenClientConnect);
  18. myThread.Start();
  19. Console.ReadLine();
  20. }
  21. /// <summary>
  22. /// 监听客户端连接
  23. /// </summary>
  24. private static void ListenClientConnect()
  25. {
  26. while (true)
  27. {
  28. Socket clientSocket = serverSocket.Accept();
  29. clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
  30. Thread receiveThread = new Thread(ReceiveMessage);
  31. receiveThread.Start(clientSocket);
  32. }
  33. }
  34. /// <summary>
  35. /// 接收消息
  36. /// </summary>
  37. /// <param name="clientSocket"></param>
  38. private static void ReceiveMessage(object clientSocket)
  39. {
  40. Socket myClientSocket = (Socket)clientSocket;
  41. while (true)
  42. {
  43. try
  44. {
  45. //通过clientSocket接收数据
  46. int receiveNumber = myClientSocket.Receive(result);
  47. Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
  48. }
  49. catch(Exception ex)
  50. {
  51. Console.WriteLine(ex.Message);
  52. myClientSocket.Shutdown(SocketShutdown.Both);
  53. myClientSocket.Close();
  54. break;
  55. }
  56. }
  57. }
  58. }
  59. }

以上是服务端(server)的完整代码。

客户端(Client)的完整代码如下:

引入命名空间:

[csharp] view plaincopyprint?

  1. using System.Net;
  2. using System.Net.Sockets;
  3. using System.Threading;

完整代码:

[csharp] view plaincopyprint?

  1. namespace SocketClient
  2. {
  3. class Program
  4. {
  5. private static byte[] result = new byte[1024];
  6. static void Main(string[] args)
  7. {
  8. //设定服务器IP地址
  9. IPAddress ip = IPAddress.Parse("127.0.0.1");
  10. Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  11. try
  12. {
  13. clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口
  14. Console.WriteLine("连接服务器成功");
  15. }
  16. catch
  17. {
  18. Console.WriteLine("连接服务器失败,请按回车键退出!");
  19. return;
  20. }
  21. //通过clientSocket接收数据
  22. int receiveLength = clientSocket.Receive(result);
  23. Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));
  24. //通过 clientSocket 发送数据
  25. for (int i = 0; i < 10; i++)
  26. {
  27. try
  28. {
  29. Thread.Sleep(1000);    //等待1秒钟
  30. string sendMessage = "client send Message Hellp" + DateTime.Now;
  31. clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
  32. Console.WriteLine("向服务器发送消息:{0}" + sendMessage);
  33. }
  34. catch
  35. {
  36. clientSocket.Shutdown(SocketShutdown.Both);
  37. clientSocket.Close();
  38. break;
  39. }
  40. }
  41. Console.WriteLine("发送完毕,按回车键退出");
  42. Console.ReadLine();
  43. }
  44. }
  45. }

编译成功后,先运行 服务端(server),再运行客户端(client)即可达到通信效果。

效果如下图:

该程序已在局域网测试通过。(192.168.X.X)

若编译失败,可到下面的地址下载项目文件:

http://download.csdn.net/source/3465765

(转)C# Socket简单例子(服务器与客户端通信)

时间: 2024-08-10 17:00:23

(转)C# Socket简单例子(服务器与客户端通信)的相关文章

java memcached 简单例子 使用spymemcached客户端

只是一个简单的例子,没有太多需要解释的. 需要注意的是,如果存对象的话,对象需要实现序列化的接口. 引用了一个jar:spymemcached-2.10.3.jar 直接上代码: 1 package memTest; 2 3 import net.spy.memcached.MemcachedClient; 4 5 6 import java.io.IOException; 7 import java.io.Serializable; 8 import java.net.InetSocketAd

python socket之tcp服务器与客户端demo

python socket之tcp服务器与客户端demo 作者:vpoet 日期:夏季 server: # -*- coding: cp936 -*- ''' 建立一个python server,监听指定端口, 如果该端口被远程连接访问,则获取远程连接,然后接收数据, 并且做出相应反馈. ''' import socket if __name__=="__main__": print "Server is starting" sock = socket.socket

一个 Java 的 Socket 服务器和客户端通信的例子

http://blog.csdn.net/defonds/article/details/7971259 多个客户端对应一个服务端的通信的一个小例子.  服务端和客户端代码: public class Server { /** * 监听的端口 */ public static final int PORT = 12345; public static void main(String[] args) { System.out.println("服务器启动>>>>>&

socket编程之服务器和客户端

服务端和客户端就像银行出纳员和客户样,一个银行出纳员(服务器),不吃不睡的服务排队的客户,每个客户都会有要解决的问题,一旦完成,客户就会走开,出纳员等待下一个客户的到来. 服务器端: from socket import * from time import ctime HOST = '' #空白,是对bind方法的标识,可以使用任何可用的地址 PORT = 21567 BUFSIZ = 1024 #缓冲区大小设为1kb ADDR = (HOST, PORT) tcpSerSock = sock

socket,实现服务器和客户端对话

服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock2.h> //网络库用2.2版本 目前系统的最高版本#pragma comment(lib,"Ws2_32.lib") //加载动态连接库 x32.x64都是用ws2_32.lib这一个版本//上面为第二版 第一版头文件为WinSock.h 动态库为wsock32.libusing

C# Socket简单例子(服务器与客户端通信)

先发服务端的(Server)完整代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; namespace SocketServer {     class Program     {         private static by

Python 使用Socket模块编写一个简单的服务器和客户端

任务 Socket套接字开始监听后,使用accept函数来等待客户连接.这个过程在循环中无限循环,服务器处理完和客户端的连接后会再次调用accpet函数,等待下一个连接. 客户端代码 1 import socket 2 s1=socket.socket() 3 s1.bind(("127.0.0.1",2345)) 4 s1.listen(5) 5 while 1: 6 conn,address = s1.accept() 7 print("a new connect fro

用C++写一个简单的服务器和客户端

我们将创建一个服务器节点add_two_ints_server,它将会收到两个整数,并且返回它们的和.切换目录到之前建立的beginner_tutorials包下: cd ~/catkin_ws/src/beginner_tutorials 编辑src/add_two_ints_server.cpp文件: vim src/add_two_ints_server.cpp 也就是说我们写的客户点也是一个node节点,它的cpp和生成的可执行模块和前面的talker.listener是一样的,只不过他

Linux基础——通过select实现简单的服务器与客户端

在这里,我们还是需要一个管道,只不过,我们只需这一个管道,即可知道,客户端有哪些上线.对话.下线等. 服务器端的实现代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <sys/stat.h> 5 #include <sys/types.h> 6 #include <fcntl.h> 7 #include <sys/t