今天看了一下《计算机网络:自顶向下方法》,也就是计算机网络的教材的应用层一章,决定实现以下后面的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); //发回给客户机
}
}
}

运行结果:

初探网络编程--TCP套接字编程演示的更多相关文章

  1. unix网络编程——TCP套接字编程

    TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...

  2. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  3. UNP学习笔记1——基本TCP套接字编程

    1 套接字地址结构 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.每个协议族都定义了自己的套接字结构.这些套接字的结构以sockaddr_开头,以每个协议族唯一的后缀名结尾. 1.1 I ...

  4. TCP套接字编程模型及实例

    摘要:     本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析. PS:本文权当 ...

  5. 【UNIX网络编程(二)】基本TCP套接字编程函数

    基于TCP客户/server程序的套接字函数图例如以下: 运行网络I/O.一个进程必须做的第一件事就是调用socket函数.指定期望的通信协议类型. #include <sys/socket.h ...

  6. <网络编程>基本TCP套接字编程

    tcp提供了可靠传输,当tcp向另一端发送数据的时候,要求对端返回一个确认.如果没有接收到确认,tcp就重传数据并且等待更长时间,数次重传失败后,tcp才放弃. 建立一个tcp连接会发生如下事情: 服 ...

  7. unix网络编程第四章----基于TCP套接字编程

    为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...

  8. 套接字编程相关函数(2:TCP套接字编程相关函数)

    本文摘录自<UNIX网络编程 卷1>. 基本套接字函数 socket函数 为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型.其定义如下: #in ...

  9. C项目实践--网络协议和套接字编程

    1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...

随机推荐

  1. LINQ / LINQ to SQL / LINQ to XXX 它们到底有什么区别

    LINQ是新生事物,不过从不少文章和讨论上看来,这方面的概念也已经有点混沌不清了.因此我们经常可以看到这样的话: LINQ只能将数据表与实体属性一一对应…… LINQ开发指南:在LINQ中进行数据库字 ...

  2. AngularJS结合RequireJS做文件合并压缩的那些坑

    我在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须 ...

  3. jQuery原型方法each使用和源码分析

    jQuery.each方法是jQuery的核心工具方法之一,通用例遍方法,可用于例遍对象和数组.不同于例遍 jQuery 对象的 $().each() 方法,此方法可用于例遍任何对象.通常需要两个参数 ...

  4. DevExpress .NET界面开发示例大全

    说到做.net界面开发,很多人应该都会想到DevExpress. 它的 .net界面开发系列一共有7个版本:WinForms.ASP.NET.MVC.WPF.Silverlight.Windows 8 ...

  5. 为ListView组件加上快速滑块以及修改快速滑块图像

    本文转载自:http://blog.csdn.net/ouyang_peng/article/details/46919723 作者:欧阳鹏  欢迎转载,与人分享是进步的源泉! 转载请保留原文地址:h ...

  6. XMPP学习——3、XMPP协议学习补充

    流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XM ...

  7. UITableView

    知识点: 1)UITableView 2)UITableViewCell ====================================================== 一.UITabl ...

  8. Android项目实战(二十二):启动另一个APP or 重启本APP

    一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...

  9. MVVM 模式下iOS项目目录结构详细说明

    ➠更多技术干货请戳:听云博客 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式——MVVM. 所以 MVVM 到底是什么 ...

  10. 【代码笔记】iOS-浮动的云

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...