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的更多相关文章
随机推荐
- Hibernate 检索(查询)策略
1.立即检索 (查询) 立即检索就是在调用get方法的时候,会直接向数据库发出sql语句查询,并将结果放到session缓存中,在查询的时候会将级联的对象一对查出,(发出多条sql语句): 明显的缺点 ...
- 初步认识dubbo--小案例
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...
- Sql注入基础_access注入
1.access注入攻击片段-联合查询 2.access注入攻击片段-逐字猜解法 3.Access偏移注入(表名和列名猜解成功率不是百分百,猜解不到) access注入攻击片段-联合查询法 判断注入 ...
- SqlCommand对象-Transaction事务的使用
using (SqlConnection connection = new SqlConnection(connStr)) { SqlCommand sqlcmd = new SqlCommand() ...
- Python 模块续 configparser、shutil、XML、paramiko、系统命令、
一.configparse # 注释1 ; 注释2 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [section2] # 节点 k1 = v1 # 值 1.获取所有节点 ...
- 17南宁区域赛 J - Rearrangement 【规律】
题目链接 https://nanti.jisuanke.com/t/19976 题意 给出 一个n 然后 给出 2*n 个数 可以重新排列成两行 然后 相邻的两个数 加起来 不能被三整除 可以上下相邻 ...
- 浅谈HTTPS协议
前言 理解协议是做接口测试的前提.本文主要向大家展示博主对HTTPS协议的理解,网上有诸多资料,有些写得过于晦涩难懂,尤其是需要密码学的一些知识.我做了一下简单的整理,刨除复杂的底层实现,单从理解SS ...
- $Android AlertDialog的各种用法总结
Refer:http://www.2cto.com/kf/201205/131876.html (一)最简单的用法(详见注释) 1 // 1.创建简单的AlertDialog // AlertDial ...
- springboot-vue项目后台1
- Linux用户和用户组管理 用户管理相关命令
用户添加命令 useradd 注意: 新添加的用户如果不设定密码是不能够登录系统的 命令格式: [root@localhost ~]#useradd [选项] 用户名 选项说明: 选项 选项说明 -u ...