TCP/IP以及Socket对象基本
1 OSI七层模型概念介绍

| 应用层 | FTP Telnet HTTP | SNMP DNS | |
| 传输层 | TCP | UDP | |
| 网络互联层 | IP | ||
| 主机-网络层 | 以太网:IEEE802.3 | ||
| 令牌环网:IEEE802.4 | |||
客户端代码
package com.asiaInfo.caozg.ch_01; import java.io.*;
import java.net.Socket; /**
* @Authgor: gosaint
* @Description:
* @Date Created in 21:31 2018/1/7
* @Modified By:客户端代码
*/
public class EchoClient {
// 本机的IP地址
private String host = "localhost";
// 本机的端口号
private int port = 8000;
// socket 对象
private Socket socket;
// 构造器初始化Socket对象
public EchoClient() throws IOException {
socket = new Socket(host, port);
}
// 测试方法
public static void main(String args[]) throws IOException {
new EchoClient().talk();
} private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
} private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
} public void talk() throws IOException {
try {
// 从socket读取数据
BufferedReader br = getReader(socket);
// 向socket写入数据
PrintWriter pw = getWriter(socket);
// 把控制台输入的数据转换为字符流,然后读取
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
while ((msg = localReader.readLine()) != null) {
// 将读取的数据写出的输出流(打印流)
pw.println(msg);
System.out.println(br.readLine()); if (msg.equals("bye"))
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务端流程

package com.asiaInfo.caozg.ch_01; import java.io.*;
import java.net.*; public class EchoServer {
private int port = 8000;
private ServerSocket serverSocket; public EchoServer() throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("服务器启动");
} public String echo(String msg) {
return "echo:" + msg;
} private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
} private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
} public void service() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept(); //等待客户连接
System.out.println("New connection accepted "
+ socket.getInetAddress() + ":" + socket.getPort());
// 从socket获取输入流字符,阅读消息
BufferedReader br = getReader(socket);
// 向socket写出数据
PrintWriter pw = getWriter(socket); String msg = null;
// 阅读消息
while ((msg = br.readLine()) != null) {
System.out.println(msg);
// 写出消息
pw.println(echo(msg));
if (msg.equals("bye")) //如果客户发送的消息为“bye”,就结束通信
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null) socket.close(); //断开连接
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public static void main(String args[]) throws IOException {
new EchoServer().service();
}
}
public class PortScanner{
public static void main(String[] args){
private String host="localhost";//本机的IP地址
new PortScanner().scan(host);
}
public void scan(String host){
Socket s=null;
try{
for(int port=1;port<1024;port++){
// 创建socket对象
s=new Socket(host,port);
System.out.println("该端口没有被占用:"+port);
}
}catch(IOException e){
Systrm.out.println("该端口被占用:"+port);
}finally{
try{
if(s!=null)
s.close;
}catch(Exception e){
e.printStackTrance();
}
}
}
}
TCP/IP以及Socket对象基本的更多相关文章
- TCP/IP、SOCKET、HTTP之间的联系与区别
主要内容: 1.网络的七层协议 2.TCP/IP.SOCKET.HTTP简介 3.TCP连接.HTTP连接.Socket连接的区别 一.网络的七层协议 网络七层由下往上分别为物理层.数据链路层.网络层 ...
- 网络协议HTTP、TCP/IP、Socket
网络协议HTTP.TCP/IP.Socket 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的 ...
- ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系
TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为: 对应 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- ...
- Linux内核 TCP/IP、Socket参数调优
Linux内核 TCP/IP.Socket参数调优 2014-06-06 Harrison.... 阅 9611 转 165 转藏到我的图书馆 微信分享: Doc1: /proc/sy ...
- TCP/IP以及Socket聊天室带类库源码分享
TCP/IP以及Socket聊天室带类库源码分享 最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查 ...
- TCP/IP 和 Socket 的关系
要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...
- TCP/IP,HTTP,Socket的区别与联系
一 忆往昔,尽是悔恨泪. 在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系. 二 正题 网络七层: ...
- 【转】TCP/IP和SOCKET的区别
要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...
- 网络基础之HTTP、TCP/IP、Socket
一.HTTP相关 https://www.cnblogs.com/sunny-sl/p/6529830.html https://www.cnblogs.com/ranyonsue/p/5984001 ...
随机推荐
- IOS 判断当前UIViewController 是否正在显示
我通常的做法是根据视图控制器的生命周期来判断,其是否是正在使用的状态. 举例 设一个实例布尔变量isVisible 在 -ViewWillAppear 里面 isVisible = YES ; 在 ...
- Java多线程系列 JUC线程池04 线程池原理解析(三)
转载 http://www.cnblogs.com/skywang12345/p/3509954.html https://blog.csdn.net/qq_22929803/article/det ...
- 《程序员代码面试指南》第一章 栈和队列 构造数组的MaxTree
题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @Creat ...
- 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)
<python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...
- js里对php存贮的cookie进行读取和删除
/* 读取cookie */ function getCookie(name){ var arr,reg=new RegExp("(^| )"+name+"=([^;]* ...
- 关于 tornado.simple_httpclient SimpleAsyncHTTPClient fetch下载大文件,默认60s的问题
遇到了线上发布任务失败的情况,要发布的包大小77M,网络OK,手动测试速度是1.7M,下载77M文件用时17s左右,理论上完全没有问题 但是,从日志看确实是download的时候,60s 超时了,而且 ...
- Oracle的PL_SQL的结构
--PL/SQL的结构 declare --声明变量和常量关键字 v_name nvarchar2(); v_age integer;--常规变量声明 v_product table_name.col ...
- 分享知识-快乐自己:shiro 异常类型
<!-- 身份认证异常 --> 1):身份令牌异常,不支持的身份令牌 --> org.apache.shiro.authc.pam.UnsupportedTokenException ...
- Spring4自动装配(default-autowire) (转)
原文地址:http://blog.csdn.net/conglinyu/article/details/63684957 Spring 自动装配 通过配置default-autowire 属性,Spr ...
- C++quickSort
void QuickSort1(int *s,int left,int right){ int i,j,t,pivot; if(left>right) return; if(left<ri ...