review40
使用URL创建对象的应用程序称为客户端程序。
URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。
InetAddress类可以将域名和IP地址一起输出。
如:
InetAddress address = InetAddress.getByName("www.sina.com.cn");
网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程(程序)。
网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程。
客户端程序使用Socket类建立负责连接到服务器的套接字对象。
Socket的构造方法是Socket(String host, int port),参数host是服务器的IP地址,port是一个端口号。
当套接字对象clientSocket建立后,clientSocket可以使用方法getInputStream()获得一个输入流,这个输入流的源和服务器的一个输出流的目的地刚好相同,一次客户端用输入流可以获取一个输出流中的数据;clientSocket使用方法getOutputStream()获得一个输出流,这个输出流的目的地和服务器端的一个输入流的源刚好相同,因此服务器用输入流可以读取客户写入到输出流的数据。
客户负责呼叫
为了能使客户成功地连接到服务器,服务器必须建立一个ServerSocket对象。
ServerSocket的构造方法是ServerSocket(int port),port是一个端口号。port必须和客户端呼叫的端口号相同。
当服务器的ServerSocket对象serverForClient建立后,就可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来。
Client.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket; public class Client { public static void main(String[] args) {
// TODO Auto-generated method stub
String [] mess = {"2010世界杯在哪举行?", "巴西进入世界杯了吗?", "中国进入世界杯了吗?"};
Socket mysocket;
DataInputStream in = null;
DataOutputStream out = null; try {
mysocket = new Socket("127.0.0.1", 2010);
in = new DataInputStream(mysocket.getInputStream());
out = new DataOutputStream(mysocket.getOutputStream());
for(int i = 0; i < 3; i++)
{
out.writeUTF(mess[i]);
String s = in.readUTF();
System.out.println("客户收到服务器的回答: " + s);
Thread.sleep(500);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
Server.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Server { public static void main(String[] args) {
// TODO Auto-generated method stub
String [] answer = {"南非", "进入世界杯了", "哈哈"};
ServerSocket serverForClient = null;
Socket socketOnServer = null;
DataOutputStream out = null;
DataInputStream in = null; try {
serverForClient = new ServerSocket(2010);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {
System.out.println("等待客户呼叫");
socketOnServer = serverForClient.accept();
out = new DataOutputStream(socketOnServer.getOutputStream());
in = new DataInputStream(socketOnServer.getInputStream());
for(int i = 0; i < answer.length; i++)
{
String s = in.readUTF();
System.out.println("服务器收到客户的提问:" + s);
out.writeUTF(answer[i]);
Thread.sleep(500);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
运行结果:
Server.java

Client.java

review40的更多相关文章
随机推荐
- 查看java进程的所有信息
查看java 进程下的所有信息 ll /proc/pid/fd ru:ll /proc/24047/fd
- 第六课作业——主从复制和sentinel高可用
第六课时作业 静哥 by 2016.3.21~2016.4.3 [作业描述] 1.配置主从复制,截图看日志 2.配置一个哨兵,一主一从结构,并实现主宕机从接管的过程,截图显示 3.总结哨兵的原理 ...
- [转载]使用iscroll.js-tab左右滑动导航--tab点击无效果
转载自:http://blog.csdn.net/zuoyiran520081/article/details/77369421 最近在页面中用iscroll.js,但是但是有跳转,用a标签的hre ...
- TypeError: save() missing 1 required positional argument: 'self'
RT,在创建模型对象的时候,提示TypeError: save() missing 1 required positional argument: 'self' 解决办法:在创建模型对象的时候需要加上 ...
- 内置函数: filter 和 map
内置函数———filter和map filter filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表.接收两个参数,第一个为函数,第二个为序列,序列的每个元素作 ...
- Js前台页面搜索
$("#filter").on("keyup",function(){$(".aimed_list").hide().filter(&quo ...
- hadoop学习第三天-MapReduce介绍&&WordCount示例&&倒排索引示例
一.MapReduce介绍 (最好以下面的两个示例来理解原理) 1. MapReduce的基本思想 Map-reduce的思想就是“分而治之” Map Mapper负责“分”,即把复杂的任务分解为若干 ...
- C#基础之匿名方法实例教程
本文以实例形式讲解了C#的匿名方法的用法,分享给大家供大家参考之用.具体如下: 匿名方法是C# 2.0的语言新特性.首先看个最简单的例子: class Program { static void Ma ...
- Docker部署JavaWeb项目实战
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在Ubuntu14.04 64位系统下来创建一个运行Javaweb应用程 ...
- VC6.0 开发 64 位程序
1. 设置平台SDK(如:Microsoft platform sdk 2003),选择64位的编译.链接环境. setenv /XP64 /DEBUG 2. 利用这个环境启动VC6.0. msdev ...