Fork me on GitHub

初探网络编程--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 + '\n'); //加上换行符发送到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() + '\n'; //将其变为大写,加上回车符 outToClient.writeBytes(capedSentence); //发回给客户机 } } }

 

运行结果:

 

posted @ 2014-04-02 20:10  whatbeg  阅读(1511)  评论(2编辑  收藏  举报