计算机⽹络原理实验1《WindowsSocket编程》
原理实验1 《Windows Socket编程》
⼀、实验⽬的
通过实验,熟悉并掌握计算机Windows 编程的基本知识,进⼀步加深对课堂所学基本内容的理解,掌握基本的Windows编程技巧,通过实验能够进⾏⼀些简单的⽹络程序设计。
⼆、实验内容
1、了解基本的知识
2、基于Java完成Socket编程,设计并实现⼀个简单的聊天系统,包括客户端及服务器端。
完成服务端使⽤telnet与服务器通信
完成客户端与服务端通信
完成基于多线程的实现服务端可以与多个客户端通信
3、可选,重构现有代码完成带界⾯的软件。实现各客户端之间聊天,以及多⼈聊天室。
三、实验⽅法
socket编程聊天室基本流程
1、利⽤Java提供的java.Socket、java.ServerSocket等Socket相关⼯具,实现客户端与服务端的模拟通讯,即客户端、服务端各写⼀个Java类,并同时运⾏进⾏即时通讯测试;
2、上述测试完毕后即可开始构建图形化界⾯的多⼈聊天室以及私聊聊天室,即IP Messenger的原型。主要原理即单点对多点通讯、单点对单点通讯。由于Java图形化处理的Swing技术较⽼,这⾥选择C++的Qt平台进⾏图形化实现。Qt Creator中也提供了类似的Socket⼯具,整体使⽤⽅法与Java的Socket类似。
四、实验步骤
1、Socket通信测试
(1) 新建⼯程
创建⼀个简单的Java⼯程,这⾥使⽤IntelliJ IDEA完成。
(2) 建⽴两个Java类模拟客户端与服务端,使⽤telnet并通过Socket进⾏通信。 创建服务端类Java⽂件sampleServer.java,启动函数start负责建⽴服务器并等待连接,⽽停⽌⽅法`stop`负责关闭连接和相
关的IO流。`accept`⽅法在serverSocket对象创建后等待客户端连接。如果没有客户端连接,轮询将继续,直到客户端连接,下⾯的代码将继续执⾏。连接建⽴后,双⽅建⽴通信通道,IO流进⾏数据读写。
创建客户端类Java⽂件sampleClient.java,StartConnection ⽅法指定IP与端⼝,若与服务器成功建⽴连接,则获取建⽴的通道的IO流,out 与in输⼊输出流,来实现后续与服务端的消息接收与发送。sendMessage ⽅法基于IO流发送消息;StopConnection 关闭与服务端的连接;主⽅法获得⽤户在命令⾏的输⼊,发送给服务端。import  ServerSocket ;import  Socket ;public  class  sampleServer {    private  ServerSocket serverSocket ;    private  Socket clientSocket ;    private  PrintWriter out ;    private  BufferedReader in ;    public  void  start (int  port ) throws  Exception {        serverSocket = new  ServerSocket (port );        clientSocket = serverSocket .accept ();        out = new  PrintWriter (clientSocket .getOutputStream (), true );        in = new  BufferedReader (new  InputStreamReader (clientSocket .getInputStream ()));        String inputLine ;        while  ((inputLine = in .readLine ()) != null ) {            if  (".".equals (inputLine )) {                out .println ("good bye");                stop ();                break ;            }            out .println ("server got msg: " + inputLine );        }    }    public  void  stop () throws  Exception {        in .close ();        out .close ();        clientSocket .close ();        serverSocket .close ();    }    public  static  void  main (String [] args ) {        try  {            sampleServer server = new 
sampleServer ();            server .start (6666);        } catch  (Exception ex ) {            ex .printStackTrace ();        }    }}
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2、图形化通信构建
构建相应的图形化客户端界⾯。这⾥使⽤Qt平台构建,具体的Socket通信⽅法与上述的Java⽅法的使⽤是类似的。下述是构建好的GUI及其通信效果。
五、实验结果import  Socket ;import  Scanner ;public  class  sampleClient {    private  Socket clientSocket ;    private  PrintWriter out ;    private  BufferedReader in ;    public  void  startConnection (String ip , int  port ) throws  Exception {        clientSocket = new  Socket (ip , port );        out = new  PrintWriter (clientSocket .getOutputStream (), true );        in = new  BufferedReader (new  InputStreamReader (clientSocket .getInputStream ()));    }    public  String sendMessage (String msg ) throws  Exception {        out .println (msg );        return  in .readLine ();    }    public  void  stopConnection () {        try  {            in .close ();            out .close ();            clientSocket .close ();        } catch  (Exception ex ) {            ex .printStackTrace ();        }    }    public  static  void  main (String [] args ) {        try  {            // build the connection            sampleClient client = new  sampleClient ();            client .startConnection ("127.0.0.1", 6666);            // receive the input string from terminal and send it to server            Scanner sc = new  Scanner (System .in );            while  (true ) {                String response = client .sendMessage (sc .nextLine ());                System .out .println (response );                if  (response .equals ("good bye")) {                    client .stopConnection ();                    break ;             
  }            }        } catch  (Exception ex ) {            ex .printStackTrace ();        }    }}
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Socket通信测试结果:
其余结果已在实验步骤中进⾏了展⽰。
六、实验结论
我们平时说的最多的Socket是对TCP/IP协议的封装,Socket本⾝并不是协议,⽽是⼀个调⽤接⼝(API),通过Socket,我们才能使⽤TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接⼝在设计的时候,就希望也能适应其他的⽹络协议。所以说,Socket的出现只是使得程
序员更⽅便地使⽤TCP/IP协议栈⽽已,是对TCP/IP协议的抽象,从⽽形成了我们知道的⼀些最基本的函数接⼝。
七、实验⼩结
本次实验主要是体验了计算机⽹络中的TCP/IP协议在通信中的具体使⽤。通过⾃⼰调⽤相关的API和⽅法实现了基本的通讯功能和⽂件传输功能(限于局域⽹内),因此还是⽐较有成就感的,对于⽹络的认识也更进了⼀步。
套接字(socket)是通信的基⽯,是⽀持TCP/IP协议的⽹络通信的基本操作单元。它是⽹络通信过程中端点的抽象表⽰,包含进⾏⽹络通信必须的五种信息:连接使⽤的协议,本地主机的IP地址,本地进程的协议端⼝,远地主机的IP地址,远地进程的协议端⼝。
Socket不是某⼀层的协议,它是应⽤层与TCP/IP协议族通信的中间软件抽象层,它是⼀组编程接⼝(即API),在设计模式中,socket就是门⾯模式(⼜称为外观模式,Facade),它把复杂的TCP/IP协议族隐藏在Socket接⼝后⾯,对⽤户来说,⼀组简单的接⼝就是全部,让socket去组织数据,以符合指定的协议。总的来说Socket就是⼀组API,对TCP/IP协议进⾏封装的API接⼝。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。