Socket客户端和服务端的编程实现(C#和android附运行截图).doc

上传人:飞****9 文档编号:136127943 上传时间:2020-06-24 格式:DOC 页数:17 大小:470.50KB
返回 下载 相关 举报
Socket客户端和服务端的编程实现(C#和android附运行截图).doc_第1页
第1页 / 共17页
Socket客户端和服务端的编程实现(C#和android附运行截图).doc_第2页
第2页 / 共17页
Socket客户端和服务端的编程实现(C#和android附运行截图).doc_第3页
第3页 / 共17页
Socket客户端和服务端的编程实现(C#和android附运行截图).doc_第4页
第4页 / 共17页
Socket客户端和服务端的编程实现(C#和android附运行截图).doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《Socket客户端和服务端的编程实现(C#和android附运行截图).doc》由会员分享,可在线阅读,更多相关《Socket客户端和服务端的编程实现(C#和android附运行截图).doc(17页珍藏版)》请在金锄头文库上搜索。

1、2014 2015 学年 第 二 学期实验课程名称: 计算机新技术讲座 实验项目名称客户和服务器通信编程实现实验成绩实验者专业班级实验日期 2015.06.20第一部分:实验分析与设计一、 实验内容描述(问题域描述)1、 实验目的 1.1理解套接字(socket)通信的基本原理和机制 1.2理解进程间通信的机制。2、 实验要求 分别编写客服端和服务器端代码,建立客户端与服务器端之间正确的socket连结(语言自选,附源代码)二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等)1.实验原理网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket

2、。Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。常用的Sock

3、et类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的

4、类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值0。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上建立一个Socket意味着为一个Socket数据结构分配存储空间。 Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。

5、Socket数据结构中包含这五种信息。 Socket在测量软件中的使用也很广泛。2.实验步骤本实验在Visual Studio 2010以及安卓模拟器下实现,项目包括安卓客户端源码和服务端C#源码,本机ip为127.0.0.1,实验要实现客户端与服务端在4567号端口的通信,具体代码如下:服务端核心代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Tex

6、t;using System.Windows.Forms;using System.Collections;using System.Net;using System.Net.Sockets;using System.Threading;namespace MySocketServer public partial class FormServer : Form public FormServer() InitializeComponent(); /保存与客户相关的信息列表 ArrayList friends = new ArrayList(); /负责监听的套接字 TcpListener l

7、istener; /只是是否启动了监听 bool IsStart = false; /对控件进行调用委托类型和委托方法 /在列表中写字符串 delegate void AppendDelegate(string str); AppendDelegate AppendString; /在建立列表时,向下拉列表中添加客户信息 delegate void AddDelegate(MyFriend frd); AddDelegate Addfriend; /在断开连接时,从下拉列表中删除客户信息 delegate void RemoveDelegate(MyFriend frd); RemoveDel

8、egate Removefriend; /在列表中写字符串的委托方法 private void AppendMethod(string str) listBoxStatu.Items.Add(str); listBoxStatu.SelectedIndex = listBoxStatu.Items.Count - 1; listBoxStatu.ClearSelected(); /向下拉列表中添加信息的委托方法 private void AddMethod(MyFriend frd) lock (friends) friends.Add(frd); comboBoxClient.Items.A

9、dd(frd.socket.RemoteEndPoint.ToString(); /从下拉列表中删除信息的委托方法 private void RemoveMethod(MyFriend frd) int i = friends.IndexOf(frd); comboBoxClient.Items.RemoveAt(i); lock (friends) friends.Remove(frd); frd.Dispose(); private void FormServer_Load(object sender, EventArgs e) /实例化委托对象,与委托方法关联 AppendString

10、= new AppendDelegate(AppendMethod); Addfriend = new AddDelegate(AddMethod); Removefriend = new RemoveDelegate(RemoveMethod); /获取本机IPv4地址 List listIP = getIP(); if (listIP.Count = 0) boBoxIP.Items.Clear(); boBoxIP.Text = 未能获取IP!; else if (listIP.Count = 1) boBoxIP.Items.Add(listIP0); boBoxIP.Selected

11、Index = 0; else foreach (string str in listIP) boBoxIP.Items.Add(str); boBoxIP.Text = 请选择IP!; /设置默认端口号 textBoxServerPort.Text = 4567; private void buttonStart_Click(object sender, EventArgs e) /服务器已在其中监听,则返回 if (IsStart) return; /服务器启动侦听 IPEndPoint localep = new IPEndPoint(IPAddress.Parse(comboBoxIP

12、.Text), int.Parse(textBoxServerPort.Text); listener = new TcpListener(localep); listener.Start(10); IsStart = true; listBoxStatu.Invoke(AppendString, string.Format(服务器已经启动监听!端点为:0。, listener.LocalEndpoint.ToString(); /接受连接请求的异步调用 AsyncCallback callback = new AsyncCallback(AcceptCallBack); listener.BeginAcceptSocket(callback, liste

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号