1.socket简介:

socket通常称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定在一个端口上,不同的端口对应不同的服务。

应用程序通常通过"套接字",向网络发出请求或者应答网络请求。socket和serverSocket类位于java.net包中。serverScoket用于服务端,socket是建立网络连接时使用的。连接成功时,应用程序两端都会产生一个socket实例,操作这个实例,完成所需的会话。

2.获取地址和端口号:

通过socket可以获取获取本地地址和端口号,以及远程地址和端口号。

服务器端源码:

 1 package socket;
 2
 3 import java.net.InetAddress;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6
 7 public class Server {
 8     public static void main(String[] args) throws Exception {
 9         //创建serverSocket,并申请8080端口
10         ServerSocket ss = new ServerSocket(8080);
11         //阻塞方法,直到某个Socket连接。连接成功,产生Socket实例。
12         Socket s = ss.accept();
13         int localPort = s.getLocalPort();//获取本地端口
14         InetAddress localAdd = s.getLocalAddress();//获取套接字绑定的本地地址IP
15         String hostName = localAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
16         String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
17         System.out.println("本地端口为:"+localPort);
18         System.out.println("本地IP地址的完全限定域名:"+hostName);
19         System.out.println("本地IP的字符串为:"+hostAddress);
20         System.out.println("*************分割符*****************");
21         int port = s.getPort();//获取远程端使用的端口
22         InetAddress inetAdd = s.getInetAddress();//获取套接字绑定的远程的IP
23         String inetName = inetAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
24         String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
25         System.out.println("远程端口为:"+port);
26         System.out.println("远程IP地址的完全限定域名"+inetName);
27         System.out.println("远程IP的字符串为"+inetAddress);
28     }
29 }

客服端代码:

 1 package socket;
 2
 3 import java.net.InetAddress;
 4 import java.net.Socket;
 5
 6 public class Client {
 7     public static void main(String[] args) throws Exception {
 8         //连接的主机名为"localhost",连接到的主机8080端口。
 9         Socket s = new Socket("192.168.1.103",8080);
10         int localPort = s.getLocalPort();//获取本地端口
11         InetAddress localAdd = s.getLocalAddress();//获取套接字绑定的本地地址IP
12         String hostName = localAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
13         String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
14         System.out.println("本地端口为:"+localPort);
15         System.out.println("本地IP地址的完全限定域名:"+hostName);
16         System.out.println("本地IP的字符串为:"+hostAddress);
17         System.out.println("*************分割符*****************");
18         int port = s.getPort();//获取远程端使用的端口
19         InetAddress inetAdd = s.getInetAddress();//获取套接字绑定的远程的IP
20         String inetName = inetAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
21         String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
22         System.out.println("远程端口为:"+port);
23         System.out.println("远程IP地址的完全限定域名"+inetName);
24         System.out.println("远程IP的字符串为"+inetAddress);
25     }
26 }

注意:要先开服务器,再开客户端。可以用浏览器代替客户端,因为http协议是基于tcp/ip协议的。

3.获取网络的输入和输出流

服务器源码:

 1 package socket;
 2
 3 import java.io.BufferedReader;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.io.OutputStreamWriter;
 8 import java.io.PrintWriter;
 9 import java.net.InetAddress;
10 import java.net.ServerSocket;
11 import java.net.Socket;
12
13 public class Server {
14     public static void main(String[] args) throws Exception {
15         //创建serverSocket,并申请8080端口
16         ServerSocket ss = new ServerSocket(8080);
17         //阻塞方法,直到某个Socket连接。连接成功,产生Socket实例。
18         Socket s = ss.accept();
19         System.out.println("有客户端进入:");
20         int localPort = s.getLocalPort();//获取本地端口
21         InetAddress localAdd = s.getLocalAddress();//获取套接字绑定的本地地址IP
22         String hostName = localAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
23         String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
24         System.out.println("本地端口为:"+localPort);
25         System.out.println("本地IP地址的完全限定域名:"+hostName);
26         System.out.println("本地IP的字符串为:"+hostAddress);
27         System.out.println("*************分割符*****************");
28         int port = s.getPort();//获取远程端使用的端口
29         InetAddress inetAdd = s.getInetAddress();//获取套接字绑定的远程的IP
30         String inetName = inetAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
31         String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
32         System.out.println("远程端口为:"+port);
33         System.out.println("远程IP地址的完全限定域名"+inetName);
34         System.out.println("远程IP的字符串为"+inetAddress);
35         InputStream is = s.getInputStream();//获取字节输入流
36         OutputStream os = s.getOutputStream();//获取字节输出流
37         BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));//将字节流按照charset解析为字符,然后从字符流中读取文本
38         PrintWriter writer = new PrintWriter(new OutputStreamWriter(os,"utf-8"));//将文本行转换为字符,按照charset解析为字符流
39         writer.println("你好,客户端!");//向客服端发送消息
40         writer.flush();//刷新该流的缓冲
41         String str =reader.readLine();//读取客服端发送的消息
42         System.out.println("客户端说:"+str);
43         s.close();//关闭socket,释放系统资源
44     }
45 }

客户端源码:

 1 package socket;
 2
 3 import java.io.BufferedReader;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.io.OutputStreamWriter;
 8 import java.io.PrintWriter;
 9 import java.net.InetAddress;
10 import java.net.Socket;
11
12 public class Client {
13     public static void main(String[] args) throws Exception {
14         //连接的主机名为"localhost",连接到的主机8080端口。
15         Socket s = new Socket("192.168.1.103",8080);
16         int localPort = s.getLocalPort();//获取本地端口
17         InetAddress localAdd = s.getLocalAddress();//获取套接字绑定的本地地址IP
18         String hostName = localAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
19         String hostAddress = localAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
20         System.out.println("本地端口为:"+localPort);
21         System.out.println("本地IP地址的完全限定域名:"+hostName);
22         System.out.println("本地IP的字符串为:"+hostAddress);
23         System.out.println("*************分割符*****************");
24         int port = s.getPort();//获取远程端使用的端口
25         InetAddress inetAdd = s.getInetAddress();//获取套接字绑定的远程的IP
26         String inetName = inetAdd.getCanonicalHostName();//获取此 IP 地址的完全限定域名
27         String inetAddress = inetAdd.getHostAddress();//返回 IP 地址字符串(以文本表现形式)。
28         System.out.println("远程端口为:"+port);
29         System.out.println("远程IP地址的完全限定域名"+inetName);
30         System.out.println("远程IP的字符串为"+inetAddress);
31         InputStream is = s.getInputStream();//获取字节输入流
32         OutputStream os = s.getOutputStream();//获取字节输出流
33         BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));//将字节流按照charset解析为字符,然后从字符流中读取文本
34         PrintWriter writer = new PrintWriter(new OutputStreamWriter(os,"utf-8"));//将文本行转换为字符,按照charset解析为字符流
35         String str = reader.readLine();//接受服务器发送的信息
36         System.out.println("服务器说:"+str);
37         writer.println("服务器,你好!");//向服务器发送信息
38         writer.flush();//刷新该流的缓冲
39         s.close();//关闭socket,释放系统资源
40     }
41 }

转载于:https://www.cnblogs.com/miyin/p/3999519.html

自己动手写简单的web应用服务器(1)—tcp通信相关推荐

  1. 自己动手写简单的web应用服务器(4)—利用socket实现文件的下载

    直接上源码: 服务器: 1 package download; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOut ...

  2. 自己动手写了个 Web 框架,我膨胀了

    ‍ 作为一线开发 Web 服务的工程师,我用过不少语言的不少框架,尤其近几年轮子层出不穷,每次刚用熟练一个,就有更新.更好的出现了.日常疲于奔命学习新框架,一次次陷入"死循环". ...

  3. Socket编程(简单(C++)实现TCP通信)

    一.什么是socket? socket顾名思义就是套接字的意思,用于描述地址和端口,是一个通信链的句柄.应用程序通过socket向网络发出请求或者回应. socket编程有三种,流式套接字(SOCK_ ...

  4. 自己动手写php web server

    最近在做一个web缓存系统,作为一个web缓存系统,肯定得有一个web服务器的功能,即实现简单的http协议.于是,干脆自己动手写一个php的web server.(注明:本文的源码,可以在本人的资源 ...

  5. 【生生不息原创】自己动手写Web自动化测试框架3 - 操纵Web控件

    原创:http://www.colblog.net/node/136 上面的两次课程我们介绍了mshtml和SHDocVw的一些用途,以及如何打开并且附加到IE上,实现IE的宏观上的控制. 这次我们将 ...

  6. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  7. 自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统

    我们会继续上传新书<自己动手写处理器>(未公布),今天是第二,我每星期试试4 第1章 处理器与MIPS 时间開始了. --胡风 · 1949 让我们以一句诗意的话,開始本书的阅读. 时间从 ...

  8. 自己动手写CPU(5)简单算术操作指令实现_1

    自己动手写CPU(5)简单算数操作指令实现_1 指令介绍 MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是: 简单算术指令 乘累加.乘累减指令 除法指令 算术指令操作介绍 一 ...

  9. ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

最新文章

  1. 简单ThreadPool实现
  2. 8086CPU简单介绍
  3. RichText设置高亮 (未完)
  4. 了解一下Cookie吧
  5. linux中断处理函数参数,第9章 设置ISR(中断处理函数)
  6. python3.5安装教程及环境配置_Python安装和环境配置教程
  7. 四处建实验室的Facebook说,我们没想跟学术界抢人啊
  8. C++高级进阶 第二季:mutable 关键字
  9. 关于ESAPI获取资源文件问题
  10. JAVEWEB 过滤器Filter的实现
  11. 阮兄弟的致远OAa8v5移动端增加功能和OEM实例
  12. 十年游戏建模师给想学次世代游戏建模同学的一些忠告,太受益了
  13. html 边框上下都添加文字,抖音上下边框加文字的视频制作方法教程分享
  14. 求闰年的c语言程序函数,c语言闰年(闰年的算法c语言程序)
  15. 360众测靶场云文件服务器,360 政企安全官网_帮助应对高级威胁攻击
  16. 史上最全 Vue 前端代码风格指南
  17. 江恩 计算机,在计算机上绘制江恩角度线 (转贴)
  18. 由繁到简,开源网络情报系统如何做“减法”?
  19. sPortfolio: Stratified Visual Analysis of Stock Portfolios
  20. 用Process启动和停止本地系统进程(打开关闭Excel,IE)

热门文章

  1. 《独家记忆》见面会高甜宠粉 张超现场解锁隐藏技能
  2. Free SQLSever 2008的书
  3. kvm vnc的使用,鼠标漂移等
  4. 获取电脑和操作系统信息-uname
  5. 仿美团实现地域选择和城市列表
  6. 2013 822 划分子网
  7. 模式——工程化实现及扩展(设计模式Java 版)
  8. 数据可视化机器学习工具在线_为什么您不能跳过学习数据可视化
  9. 莫烦Matplotlib可视化第三章画图种类代码学习
  10. leetcode 810. 黑板异或游戏