最近公司让我搞个socket小程序(服务端)。

主要的功能:客户端发字符串到服务端,服务端接收后在界面上显示。

参照了网上许多代码,自己从中修改整理代码。

 public Form4()
{
InitializeComponent();
this.Width = ;
this.Height = ;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
System.Timers.Timer timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = ;//执行间隔时间,单位为毫秒
timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
//设置IP和端口
SetServerIPAndPort(); }
/// <summary>
/// 根据当前程序目录的文本文件‘ServerIPAndPort.txt’内容来设定IP和端口
/// 格式:127.0.0.1:8885
/// </summary>
private void SetServerIPAndPort()
{
try
{ FileStream fs = new FileStream("ServerIPAndPort.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
string IPAndPort = sr.ReadLine(); ServerIP = IPAndPort.Split(':')[]; //设定IP
//ServerIP = GetLocalIPAddress();//设定IP
port = int.Parse(IPAndPort.Split(':')[]); //设定端口
Timer_out = int.Parse(IPAndPort.Split(':')[]);//设定连接超时时间(毫秒)
ipEnd = new IPEndPoint(IPAddress.Parse(ServerIP), port);
//定义套接字类型
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接
serverSocket.Bind(ipEnd);
//开始侦听
serverSocket.Listen();
//AddItemToListBox(string.Format("开始在{0}监听连接", ServerIP, port));
Thread myThread = new Thread(ListenClientConnect);
myThread.Start();
sr.Close();
fs.Close();
}
catch (Exception ex)
{
MessageBox.Show("配置IP与端口失败,错误原因:" + ex.Message);
Application.Exit();
}
}
/// <summary>
/// 监听客户端连接
/// </summary>
private void ListenClientConnect()
{
Socket clientSocket = null;
while (true)
{
try
{
clientSocket = serverSocket.Accept();
}
catch {
//当单击‘停止监听’或者退出此窗体时 AcceptTcpClient() 会产生异常
//因此可以利用此异常退出循环
break;
}
//clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.Start(clientSocket);
}
}
/// <summary>
/// 接收数据
/// </summary>
/// <param name="socket"></param>
/// <param name="timeout"></param>
/// <returns></returns>
private string Receive(Socket socket)
{ string result = string.Empty;
//socket.ReceiveTimeout = Timer_out * 1000 * 60;
List<byte> data = new List<byte>();
byte[] buffer = new byte[];
int length = ;
try
{
while ((length = socket.Receive(buffer)) > )
{
for (int j = ; j < length; j++)
{
data.Add(buffer[j]);
}
if (length < buffer.Length)
{
break;
}
}
}
catch { }
if (data.Count > )
{
result = Encoding.Default.GetString(data.ToArray(), , data.Count);
}
return result;
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="clientSocket"></param>
private void ReceiveMessage(object clientSocket)
{
flg = true;
myClientSocket = (Socket)clientSocket;
byte[] result = new byte[];
while (flg)
{
try
{
//通过clientSocket接收数据
//int receiveNumber = myClientSocket.Receive(result,result.Length,0);
//AddItemToListBox(Encoding.Unicode.GetString(result, 0, receiveNumber));
AddItemToListBox(Receive(myClientSocket));
flg = false;
//break;
}
catch (Exception ex)
{
AddItemToListBox(ex.Message);
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
}
}
}

C#——Socket的更多相关文章

  1. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  2. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  3. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  4. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  5. Socket聊天程序——初始设计

    写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  8. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  9. Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...

  10. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

随机推荐

  1. window server2008 r2 限制远程访问用户数量

    在服务器端设置 修改组策略 1,开始-运行-gpedit.msc-计算机配置-管理模板-Windows组件-远程桌面服务-远程桌面会话主机-限制连接数量-开启并改为1

  2. Django视图View

    1.什么是Django的视图函数 一个视图函数(或者一个类),简称视图 是python的一个简单的函数,他是接受web请求 并且 处理逻辑 进而返回 响应 响应可以是一张网页的HTML内容,一个重定向 ...

  3. [Python] String strip() Method

    Description The method strip() returns a copy of the string in which all chars have been stripped fr ...

  4. Telnet命令相关+DMZ主机+花生壳

    Win7如何解决telnet不是内部或外部命令的方案! telnet用法 测试端口号

  5. C# 二元一次方程参数求解

    本文记录了关于求直线斜率及纵截距值的简单方法,只是简单的记录下求解思路,最终还需根据具体项目进行优化. 设直线方程式为:y=kx+b 编程思想: 1.代入y1与x1的值,得到:y1=kx1+b 2.代 ...

  6. leetcode190

    public class Solution { public uint reverseBits(uint n) { var list = new List<uint>();//逆序的二进制 ...

  7. delphi datasnap

    http://blog.csdn.net/shuaihj/article/details/6129121 http://blog.csdn.net/ddqqyy/article/details/617 ...

  8. js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

    __proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性 ...

  9. PHP中的各种POST或GET请求

    1.表单<form> 2.fsockopen(); 3.jquery语法: $.post ($.ajax的简写) 示例代码: <!DOCTYPE html> <html& ...

  10. 使用mybatis提供的各种标签方法实现动态拼接Sql。使用sql片段提取重复的标签内容

    Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下: <select id="findUserByNameAndSex" par ...