使用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的更多相关文章

随机推荐

  1. KVC && KVO 初见

    Look,这是一个很简单的要求,点击Add me,age +1. 想一想的话很简单的,设置一个属性Nsinteger age,点击button add me,直接加1在重新显示Lable就好啦,不过, ...

  2. PHP 获得域控内用户的计算机登录名

    一个需求: 在域控范围获得访问用户的计算机名.方法: 1.测试软件环境: XAMPP Control Panel V3.2.1 ,  Apache version 2.4.7 2.Apache 2.2 ...

  3. 是面向对象设计五个基本原则(SOLID)

    单一职责原则 - 搜狗百科 https://baike.sogou.com/v51360965.htm 单一职责原则并不是一个孤立的面向对象设计原则,它是面向对象设计五个基本原则(SOLID)之一.这 ...

  4. php自定义函数: 时间转换成智能形式

    function time_trans($paratime,$suffix=false){ $now_time = time(); $dur = $now_time - $paratime; $suf ...

  5. Centos简介(一)

    Centos作为主流的一种Linux操作系统,我们选用Centos,主要是免费,以及稳定. Centos详细介绍,请参考 百度百科

  6. python并发编程&多进程(一)

    本篇理论居多,实际操作见:  python并发编程&多进程(二) 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行) ...

  7. 如何修改本地hosts文件?

    1.window7修改本地hosts文件 # window7系统hosts文件位置 C:\Windows\System32\drivers\etc 2.linux # linux系统hosts文件位置 ...

  8. Python3.6全栈开发实例[025]

    25.文件a1.txt内容(升级题)name:apple price:10 amount:3 year:2012name:tesla price:100000 amount:1 year:2013通过 ...

  9. Latex技巧:LaTex插图命令includegraphics参数详解

    Latex插图的命令是\includegraphics[选项]{文件} 这里的选项在表 7.1, 7.2, 7.3 中列出. 因为 \includegraphics 不会结束 当前段落,所以它能够在文 ...

  10. 4.4 使用STM32控制MC20进行GPS帧数据解析

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...