• 初探网络编程--TCP套接字编程演示


    今天看了一下《计算机网络:自顶向下方法》,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程。

    程序流程如下:

    1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。

    2.服务器从其连接套接字读取一行字符。

    3.服务器将该行字符转换成大写。

    4.服务器将修改后的字符串(行)通过连接套接字再发回给客户机。

    5.客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。

    下面是应用程序客户机端的代码:

    TCPClient.java

    import java.io.*;
    import java.net.*;
    class TCPClient {
        public static void main(String[] argc) throws Exception
        {
            String sentence,modifiedsentence;       //定义两个字符串,一个是标准输入的,另一个是服务器返回的已经处理的
            BufferedReader inFromUser = 
    new BufferedReader(new InputStreamReader(System.in)); //创建BufferedReader流对象来接受键盘输入 Socket clientSocket =
    new Socket("hostname",6789); //创建类型为Socket的clientSocket对象,发起客户机与服务器之间的TCP连接(hostname填服务器主机名,如果用本机做服务器,则填本机名,hostname(主机名)可以在网络或我的电脑中查看 DataOutputStream outToServer =
    new DataOutputStream(clientSocket.getOutputStream()); //创建连接到套接字的流对象,提供了到套接字的输出 BufferedReader inFromServer =
    new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); //创建连接到套接字的流对象,提供了来自套接字的输入 sentence = inFromUser.readLine(); //读入键盘输入的字符串 outToServer.writeBytes(sentence + ' '); //加上换行符发送到outToServer流中 modifiedsentence = inFromServer.readLine(); //接受返回的字符串 System.out.println("FROM SERVER: " + modifiedsentence); //打印结果 clientSocket.close(); //关闭TCP连接 } }

    下面看一下服务器端的程序:

    TCPServer.java

    import java.io.*;
    import java.net.*;
    
    class TCPServer {
        public static void main(String[] argc) throws Exception
        {
            String clientSentence,capedSentence;
            ServerSocket welcomeSocket = 
    new ServerSocket(6789); //创建一个类型为ServerSocket的welcomeSocket对象,在6789端口上监听客户机的“敲门声” while(true) //持续监听 { Socket connectionSocket =
    welcomeSocket.accept(); //当客户机“敲门”时,创建一个连接套接字connectionSocket,使用6789号端口,TCP此时在客户端和服务器间建立了一条虚拟管道,双方可以通过这条管道传输数据(字节) BufferedReader inFromClient =
    new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); //创建流对象接受客户机发来的字符串 DataOutputStream outToClient =
    new DataOutputStream(connectionSocket.getOutputStream()); //创建要发回给客户机的流对象 clientSentence = inFromClient.readLine(); //读取客户机发来的信息 capedSentence = clientSentence.toUpperCase() + ' '; //将其变为大写,加上回车符 outToClient.writeBytes(capedSentence); //发回给客户机 } } }

    运行结果:

  • 相关阅读:
    nmap参数原理抓包分析
    powershell脚本执行绕过powershell下脚本执行限制(cmd下执行)以及在cmd下隐藏脚本窗口
    windows创建域共享文件
    利用开机账户登录“轻松访问”创建Windows后门
    win7下建立超级隐藏账户
    利用python搭建Powersploit powershell脚本站点
    windows powershell基础
    Active Directory 域服务安装与测试
    python多线程与多进程--存活主机ping扫描以及爬取股票价格
    Anaconda基础使用
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3641443.html
Copyright © 2020-2023  润新知