初探网络编程--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); //发回给客户机
}
}
}
运行结果:
初探网络编程--TCP套接字编程演示的更多相关文章
- unix网络编程——TCP套接字编程
TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...
- 【UNIX网络编程(四)】TCP套接字编程具体分析
引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...
- UNP学习笔记1——基本TCP套接字编程
1 套接字地址结构 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.每个协议族都定义了自己的套接字结构.这些套接字的结构以sockaddr_开头,以每个协议族唯一的后缀名结尾. 1.1 I ...
- TCP套接字编程模型及实例
摘要: 本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析. PS:本文权当 ...
- 【UNIX网络编程(二)】基本TCP套接字编程函数
基于TCP客户/server程序的套接字函数图例如以下: 运行网络I/O.一个进程必须做的第一件事就是调用socket函数.指定期望的通信协议类型. #include <sys/socket.h ...
- <网络编程>基本TCP套接字编程
tcp提供了可靠传输,当tcp向另一端发送数据的时候,要求对端返回一个确认.如果没有接收到确认,tcp就重传数据并且等待更长时间,数次重传失败后,tcp才放弃. 建立一个tcp连接会发生如下事情: 服 ...
- unix网络编程第四章----基于TCP套接字编程
为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...
- 套接字编程相关函数(2:TCP套接字编程相关函数)
本文摘录自<UNIX网络编程 卷1>. 基本套接字函数 socket函数 为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型.其定义如下: #in ...
- C项目实践--网络协议和套接字编程
1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...
随机推荐
- 推荐25款实用的 HTML5 前端框架和开发工具【下篇】
快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5.HTML5 有许多新的特性功能,允许开发人员和设计师创建应用程序和网站,带给用户桌面应用程序的速度,性能和体验. ...
- 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动 ...
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...
- SharePoint 2013 配置基于AD的Form认证
前 言 配置SharePoint 2013基于AD的Form认证,主要有三步: 1. 修改管理中心的web.config: 2. 修改STS Application的web.config: 3. 修改 ...
- SharePoint解决The security validation for this page is invalid.
我是在一个service后台用object model去check in一个spfile的时候报的这个错.这是SharePoint的一种保护机制,在处理不能确定是安全的请求时,sharepoint就会 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q45-Q48)
Question 45 You are designing a branding strategy for a customer with a new SharePoint 2010 server f ...
- .framework使用注意、静态库配置及构架合成
使用注意: 1.项目中使用的framework中包含了资源文件时,需要手动添加该framework中的资源文件 2.由于动态库(framework默认生成为动态库)不能上架,我们在生成的时候需要修改为 ...
- 开发者账号续期后,itunes停止付款了
开发者账号过期后,没有及时续期,等再续期后,itunes停止付款到公司银行账户了.过了一个多月了还是没有收到itunes的付款.然后开始联系苹果客服和技术支持,他们都说只能通过itunes的“联系我们 ...
- MAC OS 系统使用心得
1.Windows快捷键在 mac os 里怎么调用 今天用teamviewer链接我在公司的电脑.我想调试程序,我程序默认F5是启动调试,但在mac os里,F5是调节屏幕亮度的. 这时候遇到快捷键 ...
- png-8 和 png-24的区别
png是一种图片格式,是Portable Networks Graphics的缩写,做ping. png8和png24的区别如下. 1 "PNG8"是指8位索引色位图," ...