精华内容
下载资源
问答
  • 软件工程 2016.6.30 日报 今天主要学习的内容是C# socket网络编程中的TCP通讯技术。socket编程的原理如下:  在服务端的处理流程为:  (1)建立服务器端的Socket,开始侦听整个网络中的连接请求。  (2...

    软件工程 2016.6.30 日报


     

        今天主要学习的内容是C# socket网络编程中的TCP通讯技术。socket编程的原理如下:

      在服务端的处理流程为:

        (1)建立服务器端的Socket,开始侦听整个网络中的连接请求。

        (2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。

        (3)当完成通信后,服务器关闭与客户端的Socket连接。

      在服务端的处理流程为:

        (1)建立客户端的Socket,确定要连接的服务器的主机名和端口。

        (2)发送连接请求到服务器,并等待服务器的回馈信息。

        (3)连接成功后,与服务器进行数据的交互。

        (4)数据处理完毕后,关闭自身的Socket连接。

      我自己也写了一个小的demo完成简单的通信工作,同时将前天学习的多线程的知识也结合到了demo中,实现了多线程的socket通信。

      服务器端核心的代码如下:

      1      #region ----------     开启服务器     ----------
      2         /// <summary>
      3         ///     开启服务器
      4         /// </summary>
      5         public void StartServer()
      6         {
      7             //创建负责监听的套接字,参数使用IPv4寻址协议,使用流式连接,使用TCP协议传输数据
      8             socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      9 
     10             //创建一个绑定IP和port的网络节点对象
     11             IPAddress ipAddress = IPAddress.Parse(ipAddr);
     12             IPEndPoint endPoint = new IPEndPoint(ipAddress, port);
     13 
     14             try
     15             {
     16                 //将监听socket绑定到创建的网络节点
     17                 socketWatch.Bind(endPoint);
     18 
     19                 //设置监听等待队列的长度
     20                 socketWatch.Listen(20);
     21 
     22                 //创建负责监听的线程,并传入监听方法
     23                 threadWatch = new Thread(WatchConnection);
     24                 //设置为后台线程
     25                 threadWatch.IsBackground = true;
     26                 //开启线程
     27                 threadWatch.Start();
     28 
     29                 return;
     30             }
     31             catch (SocketException se)
     32             {
     33                 Console.WriteLine("【错误】" + se.Message);
     34                 return;
     35             }
     36             catch (Exception e)
     37             {
     38                 Console.WriteLine("【错误】" + e.Message);
     39                 return;
     40             }
     41         }
     42         #endregion
     43 
     44         /// <summary>
     45         ///     监听客户端请求
     46         /// </summary>
     47         private void WatchConnection()
     48         {
     49             //持续监听请求
     50             while (true)
     51             {
     52                 Socket socketConnection = null;
     53                 try
     54                 {
     55                     //监听请求,如果有新请求则返回一个socket
     56                     socketConnection = socketWatch.Accept();
     57                     string socketKey = socketConnection.RemoteEndPoint.ToString();
     58 
     59 
     60                     //将每个新产生的socket存起来,以客户端IP:端口作为key
     61                     dictSocket.Add(socketKey, socketConnection);
     62 
     63                     Console.WriteLine("用户IP : {0} 已连接...", socketKey);
     64 
     65                     //为每个服务端通信socket创建一个单独的通信线程,负责调用通信socket的Receive方法,监听客户端发来的数据
     66                     //创建通信线程
     67                     Thread threadCommunicate = new Thread(ReceiveMsg);
     68                     threadCommunicate.IsBackground = true;
     69                     threadCommunicate.Start(socketConnection);
     70 
     71                     dictThread.Add(socketKey, threadCommunicate);
     72 
     73                 }
     74                 catch (SocketException se)
     75                 {
     76                     Console.WriteLine("【错误】" + se.Message);
     77                     return;
     78                 }
     79                 catch (Exception e)
     80                 {
     81                     Console.WriteLine("【错误】" + e.Message);
     82                     return;
     83                 }
     84             }
     85         }
     86         #endregion 
     87 
     88         /// <summary>
     89         ///     服务端监听客户发来的数据
     90         /// </summary>
     91         private void ReceiveMsg(object socketClientPara)
     92         {
     93             Socket socketClient = socketClientPara as Socket;
     94 
     95             while (true)
     96             {
     97                 // 定义一个接收消息用的缓冲区
     98                 byte[] msgReceiver = new byte[1024 * 1024 * 2];
     99 
    100                 // 接收消息的长度
    101                 int length = -1;
    102 
    103                 try
    104                 {
    105                     length = socketClient.Receive(msgReceiver);
    106                 }
    107                 catch (SocketException se)
    108                 {
    109                     string socketKey = socketClient.RemoteEndPoint.ToString();
    110                     Console.WriteLine("【错误】" + socketKey + " 接收消息异常 错误信息:" + se.Message);  
    111                 }
    112                 catch (Exception e)
    113                 {
    114                     Console.WriteLine("【错误】" + e.Message);
    115                     return;
    116                 } 
    117                  string sendMsg = Encoding.UTF8.GetString(msgReceiver, 0, length);        
    118                  Console.WriteLine("收到:{0}", sendMsg) ;
    119       }
    120    }

      客户端的核心代码如下:

     1 #region ----------    开启客户机    ----------
     2         /// <summary>
     3         ///     开启客户端
     4         /// </summary>
     5         public void StartClient()
     6         {
     7             //创建一个绑定IP和port的网络节点对象
     8             IPAddress ipAddress = IPAddress.Parse(ipAddr);
     9             IPEndPoint endPoint = new IPEndPoint(ipAddress, port);
    10 
    11             socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    12 
    13             try
    14             {
    15                 //连接服务器
    16                 socketClient.Connect(endPoint);
    17 
    18                 threadClient = new Thread(ReceiveMsg);
    19                 threadClient.IsBackground = true;
    20                 threadClient.Start();
    21             }
    22             catch (SocketException se)
    23             {
    24                 Console.WriteLine("【错误】连接服务器异常:" + se.Message);
    25                 return;
    26             }
    27             catch (Exception e)
    28             {
    29                 Console.WriteLine("【错误】连接服务器异常:" + e.Message);
    30                 return;
    31             }
    32         }
    33         #endregion
    34 
    35         #region ----------     接收消息     ----------
    36         /// <summary>
    37         ///     接收消息
    38         /// </summary>
    39         private void ReceiveMsg()
    40         {
    41             while (true)
    42             {
    43                 // 定义一个缓冲区保存接收的消息
    44                 byte[] arrMsg = new byte[1024 * 1024 * 2];
    45 
    46                 // 保存数据长度
    47                 int length = -1;
    48 
    49                 try
    50                 {
    51                     // 获取信息
    52                     length = socketClient.Receive(arrMsg);
    53 
    54                     // 解析字符串
    55                     string msgReceive = Encoding.UTF8.GetString(arrMsg);                  
    56 
    57                     Console.WriteLine("收到:{0}",msgReceive);
    58                 }
    59                 catch (SocketException se)
    60                 {
    61                     Console.WriteLine("【错误】接收消息异常:" + se.Message);
    62                     return;
    63                 }
    64                 catch (Exception e)
    65                 {
    66                     Console.WriteLine("【错误】接收消息异常:" + e.Message);
    67                     return;
    68                 }
    69             }
    70         }
    71         #endregion
    72 
    73         #region ----------     发送消息     ----------
    74         public void SendMsg(string msg)
    75         {
    76             byte[] arrMsg = Encoding.UTF8.GetBytes(msg);
    77 
    78             try
    79             {
    80                 socketClient.Send(sendArrMsg);
    81 
    82                 Console.WriteLine("我:{0}", msg);
    83             }
    84             catch (SocketException se)
    85             {
    86                 Console.WriteLine("【错误】发送消息异常:" + se.Message);
    87                 return;
    88             }
    89             catch (Exception e)
    90             {
    91                 Console.WriteLine("【错误】发送消息异常:" + e.Message);
    92                 return;
    93             }
    94 
    95         }

      我将写好的两个程序分别在同一局域网下的两台机子上跑,能够成功实现通信,这为后续进一步扩展功能,实现吐槽墙奠定了一定的基础。

    转载于:https://www.cnblogs.com/fanfan-blogs/p/5631528.html

    展开全文
  • 软件工程 2016.6.28 日报  今天,通过调查表的反馈明确了改进方向。对于我所负责的部分,需要改进的方向主要有两个方面:  1、 改正加权平均分计算方法  2、 增加类似吐槽墙的功能,对每一位准备或已经...

    软件工程 2016.6.28 日报


     

      今天,通过调查表的反馈明确了改进方向。对于我所负责的部分,需要改进的方向主要有两个方面:

        1、  改正加权平均分计算方法

        2、  增加类似吐槽墙的功能,对每一位准备或已经选修某门课程的学生,都可以查看相应课程的吐槽墙,从中获取到已经选修这么的课程的同学的建议

        根据需求,增加吐槽的功能涉及到了网络编程的部分,对于C#网络编程还有待学习。

     

      今天主要学习了一下c#多线程部分的内容。

      学习自博客http://www.jb51.net/article/46234.htm

                       http://www.cnblogs.com/csMapx/archive/2011/06/20/2084647.html

            http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html

      以下是经过学习后写的测试程序:

    static void Main(string[] args)
            {
                Thread th1 = new Thread(printx);
                Thread th2 = new Thread(print);
    
                th1.Start();
                th2.Start('y');
    
                while (th2.ThreadState != ThreadState.Stopped)
                { }
    
                Console.WriteLine();
    
                Console.WriteLine("done");
    
                Console.ReadKey();
    
            }
    
            private static void printx()
            {
                for (int i = 0; i < 100; i++)
                    Console.Write("x");
            }
    
            private static void print(object c)
            {
                for (int i = 0; i < 100; i++)
                    Console.Write("{0}", (char)c);
                Thread.Sleep(1000);
            }

        

      测试程序结果如图:      

                    

        实验结果中done实在xy输出完毕后一段时间才显示出来。

     

    转载于:https://www.cnblogs.com/fanfan-blogs/p/5624792.html

    展开全文
  • 软件工程 2016.6.29 日报  今天我的主要工作就是调查了解我校的加权平均分计算方法,并将程序加权计算部分予以修正。  通过查阅北工大教务公示,获得信息:  第十条学校利用“学分通过率”和“加权平均分...

    软件工程 2016.6.29 日报


     

      今天我的主要工作就是调查了解我校的加权平均分计算方法,并将程序加权计算部分予以修正。

      通过查阅北工大教务公示,获得信息:

        第十条学校利用“学分通过率”和“加权平均分”作为衡量学生在校期间学习质量的主要指标。辅修课程、创新学分和第二课堂的学分和成绩不计入学分通过率和加权平均分的计算。创新学分和第二课堂是学生获得毕业资格的必要条件。理工类专业学生应修不少于4学分的创新学分,其他专业应修不少于2学分的创新学分。第二课堂应修满12学分。

      同时,通过询问同学获取了在教务管理中对辅修课程的表示:

        在网站数据中有辅修标记一栏,该栏标记为2即表示辅修课程。

      除此之外,根据同学的反映,对于不及格的科目,是不计算在加权平均分中的,所以需要将不及格的科目不做处理。

     

      根据调查的资料修改了加权平均分部分的计算逻辑,由于在数据抓取部分没有抓取辅修课程标记一栏,所以对于这方面暂时无法进行修改。但对于创新学分课程以及第二课堂课程在代码逻辑中进行了排除。这就是今天所做的工作。

      

      下面是修改后的代码逻辑:

     1 #region ----------计算加权平均分----------
     2         /// <summary>
     3         ///     计算加权平均分
     4         /// </summary>
     5         /// <param name="calculateData">筛选后的成绩列表</param>
     6         /// <param name="weightedMean">加权平均分</param>
     7         /// <returns>计算是否成功</returns>
     8         public static bool CalculateWeightedMean(DataTable calculateData, out double weightedMean)
     9         {
    10             //若输入数据表为空,则不计算。
    11             if (calculateData.Rows.Count == 0)
    12             {
    13                 weightedMean = 0;
    14                 MessageBox.Show("[ERROR]No data to calculate weighted mean.");
    15                 //Console.WriteLine("[ERROR]No data to calculate weighted mean.");
    16                 return false;
    17             }
    18 
    19             try
    20             {
    21                 //计算学分和、成绩*学分和
    22                 double sumOfCredit = 0, sumOfGrade = 0;
    23                 foreach (DataRow dr in calculateData.Rows)
    24                 {
    25                     //如果成绩为数字且不是第二课堂性质的课程,计算加权
    26                     if (Regex.IsMatch(Convert.ToString(dr["成绩"]), pattern) && !Convert.ToString(dr["课程性质"]).Equals("校选修课") && Convert.ToInt32(dr["成绩"]) >= 60)
    27                     {
    28                         sumOfCredit += Convert.ToDouble(dr["学分"]);
    29                         sumOfGrade += Convert.ToDouble(dr["成绩"]) * Convert.ToDouble(dr["学分"]);
    30                     }
    31 
    32                 }
    33                 weightedMean = sumOfGrade / sumOfCredit;
    34                 return true;
    35             }
    36             catch (Exception e)
    37             {
    38                 weightedMean = -1;
    39                 MessageBox.Show("{0}", e.Message);
    40                 //Console.WriteLine("{0}", e.Message);
    41                 return false;
    42             }
    43         }
    44         #endregion

    转载于:https://www.cnblogs.com/fanfan-blogs/p/5628142.html

    展开全文
  • 软件工程个人日报 2016/6/29  今天,我进行的工作是将之前我写的UI部分的代码的变量命名、工程命名改成规范的,方便以后的进一步修改。  之前我写的代码没有符合命名规范,导致之后的修改遇到很多麻烦,所以今天...

    软件工程个人日报 2016/6/29

      今天,我进行的工作是将之前我写的UI部分的代码的变量命名、工程命名改成规范的,方便以后的进一步修改。
      之前我写的代码没有符合命名规范,导致之后的修改遇到很多麻烦,所以今天我将所有变量的命名、工程的命名更改为了符合命名规则的名字,看名字就可以知道变量所代表的意思。

    转载于:https://www.cnblogs.com/yufan-blog/p/5628163.html

    展开全文
  • 软件工程个人日报 2016/6/30  今天我主要学习了C#WPF的Canvas和总体构想了一下新增的吐槽墙功能的实现UI设计。  Canvas为容器控件,用于定位,并可以通过Visibility属性控制是否显示Canvas中的内容。通过使用...
  • 软件工程个人日报 2016/7/3 这个周末我进一步学习了C#WPF编程,并制作了吐槽墙的UI。 之前我的设想是使用Canvas控件实现吐槽墙与查成绩界面的切换,用两个Canvas分别在里面制作吐槽墙的UI和查成绩的UI,通过改变...
  • 软件工程 2016.7.3 日报

    2016-07-04 00:22:00
    软件工程 2016.7.3日报  在周五我初步搭建了吐槽墙的结构,实现了部分的功能。经过与组长的讨论,我们最终决定使用TCP通信的方式实现功能。因为对于这种比较明显的C/S结构,UDP方式的通信会使得整体处理信息的...
  • 个人日报 2016/6/28 今天,通过调查表的反馈明确了改进方向。对于我所负责的部分,需要改进的方向主要有三个方面:  1、改正使用Tab键在输入框中的切换顺序  2、增加类似吐槽墙的UI  3、美化UI 今天完成了...
  • 今天我继续学习了C#WPF编程,并且修复了程序的一些bug。 我增加了验证码图片修改的监听,以前我们使用的是sleep等待验证码的图片返回更新,现在我增加了监听,可以知道验证码图片何时更新了,提高了程序的运行速度...
  • 今天我学习了C#编程中监听文件生成和文件操作的有关内容,并增加了登录时输入错误信息的提示。 ...我今天学习了使用FileSystemWatcher()监听error.txt的创建并在文件创建后程序做出响应,将登陆成功标志flag置为false...
  • 此图片为今日报告截图 转载于:https://www.cnblogs.com/chrisbosh/p/5621564.html
  • 姓名 陈浩强 时间 2016年月日 工作内容 今天进行登录功能的测试,测试计划以及测试用例在前一天已经完成 2。经过测试,将测试结果交给分析员...当软件安装到实体机上时,...
  • 与相关组员一起设计了软件的登陆界面及其功能,并进行了代码的编写 为登录功能设计了测试方案,即等价类划分测试,属于功能测试、黑河测试: 之后相关组员可以根据我的测试方案来进行设计测试用例 ...
  • 姓名 陈浩强 时间 2016年6月30日 工作内容 ...并利用自动化测试中的深度兼容性测试功能将软件的登陆注册单模块apk进行测试,并得到了相应的实验结果。 3.制订...
  • 转载于:https://www.cnblogs.com/chrisbosh/p/5645260.html
  • 姓名 陈浩强 时间 2016年7月4日 工作内容 今天继续进行测试工作,采用优测测试平台的缺陷分析测试。 测试流程:注册账号、提交APK、得到测试结果。...将测试结果分析整理交...
  • “科研圈日报”主要关注科研圈与研究者个体、科研圈与更广阔的社会环境之间的重要互动。点击这里可以查看往期内容。· 学术荣誉“统计学诺贝尔奖”授予 R 语言软件工程师Hadley Wickham 图片来源:Hadley Wickham ...
  • 因为分析报告较长所以此处只是显示其中一小部分,来证明工作进度。如有具体问题请留言。 转载于:https://www.cnblogs.com/chrisbosh/p/5638723.html
  • 软件工程个人项目— 数独 1120173032 王晗 Github:https://github.com/lion-han/sudoku 目录 软件工程个人项目— 数独 PSP2.1 表格 个人日报: 程序功能简介: 结题思路: 生成终局 生成题目 求解数独 ...
  • 工人日报客户端11月18日电 一个普通的IT工程师通过飞算全自动软件工程平台,只输入流程图,不敲一行代码就实现了后端开发,仅仅用28分钟就完成了3个资深IT工程师近2个小时的开发工作,而且在抗并发等效能上抢占优势...
  • 原文:http://www.chinanews.com/cj/2011/01-06/2770494.shtml中新网1月6日电 据华尔街日报中文网消息,在招聘网站CareerCast.com最新发布的200个最好和最差职位的调查排名中,软件工程师排名第一,油田杂工排名倒数...
  • 本博客随笔主要目的是介绍本...给实验室提供的OA,可以加比较多功能,比如加入知乎的询问回答功能,通知活动,请假功能,采购报销,参赛课设组队功能,日报周报等,博客分享等等之类。 队员风采 张合胜: 灵魂程序员...
  • 详情见小组日报 (3) 优化人物模型,使人物和怪物拥有体积 (4) 优化攻击方式,使得攻击范围判定更加合理 (1) 优化客户端代码结构 (2) 优化通信协议 详情见小组日报 (3) 优化人物模型,使...
  • 2) 牢固掌握了软件测试计划、测试日报、测试报告的写作方法与要领。 3) 针对B/S、C/S架构及不同需求,灵活有效地制定功能测试、性能测试、配置测试、GUI测试的测试方案。 4) 熟练运用MI QTP、Rational Ro...
  • 月统计、并统计出入差额产生日报表(物品编号、物品名,数量,差额,库存余额)和月报表(物品编号,物品名。数量,差额,库存余 上请根据土述描述完成: ...
  • 算法提高 12-2扑克排序Jeff Meyerson is the creator and host of the ... Jeff Meyerson是《软件工程日报》播客的创建者和主持人。 Jeff grew up in Texas. He spent most of his childhood playing competiti...
  • 软件可以自动调整系统时间,让系统时间飞起来 缩时成分 缩分成秒 自己缩放比例 关闭软件后,系统时间...可以让日报、月报和年报、 其他用途有待网友们开发 如果有什么好的建议 可以给我发邮件交流 suoyayun@sohu.xom
  • Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲作者丨酒六来源丨北美留学生日报https://mp....

空空如也

空空如也

1 2 3 4 5 6
收藏数 106
精华内容 42
关键字:

日报软件工程