TCP通讯协议特点:
   1. tcp是基于IO流进行数据 的传输的,面向连接。
   2. tcp进行数据传输的时候是没有大小限制的。
   3. tcp是面向连接,通过三次握手的机制保证数据的完整性。可靠协议。
   4. tcp是面向连接的,所以速度慢。
   5. tcp是区分客户端与服务端的。
tcp协议下的Socket:
   Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
   ServerSocket(服务端类)
 
tcp的客户端使用步骤:
   1. 建立tcp的客户端服务。
   2. 获取到对应的流对象。
   3.写出或读取数据
   4. 关闭资源。
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket; public class Demo1 {
public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getLocalHost(),9090);
OutputStream a = socket.getOutputStream();
a.write("客户端说 :".getBytes());
socket.close();
}
}
 
tcp的服务端使用步骤
   java.net.BindException:   端口被占用。
  ServerSocket的使用 步骤
     1. 建立tcp服务端的服务。
     2. 接受客户端的连接产生一个Socket.
     3. 获取对应的流对象读取或者写出数据。
     4. 关闭资源。
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Demo2 {
public static void main(String[] args) throws IOException {
ServerSocket socket = new ServerSocket(9090);
Socket s = socket.accept();
InputStream b = s.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = b.read(buf);
System.out.println("服务端接收:"+ new String(buf,0,length)); OutputStream outputStream = s.getOutputStream();
outputStream.write("客户端你好啊!".getBytes()); socket.close();
}
}

需求: 客户端与服务端一问一答聊天。
 
 1.如果使用BuffrerdReader的readline方法一定要加上\r\n才把数据写出。
 2.使用字符流一定要调用flush方法数据才会写出。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket; public class Demo4 { public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getLocalHost(),9090);
OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream());
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String line = null;
while((line = keyReader.readLine())!=null){ socketOut.write(line+"\r\n");
socketOut.flush(); line = socketReader.readLine();
System.out.println("服务端回送的数据是:"+line);
}
socket.close();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; public class Demo5 { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(9090);
Socket socket = serverSocket.accept();
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream());
BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String line = null;
while((line = socketReader.readLine())!=null){
System.out.println("服务端接收到的数据:"+ line);
System.out.println("输入发给客户端的数据:");
line = keyReader.readLine();
socketOut.write(line+"\r\n");
socketOut.flush();
}
serverSocket.close();
}
}

模拟Tomcat

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Demo6 {
public static void main(String[] args) throws IOException {
ServerSocket serversocket = new ServerSocket(9090);
Socket socket = serversocket.accept();
OutputStream outputStream= socket.getOutputStream();
outputStream.write("nihao".getBytes());
serversocket.close();
}
}

运行服务器

查询本机ip

在浏览器输入IP和端口

因为没有标签所以浏览器不承认这是个网页

但是服务器已经停止

该段代码只可以被一个人访问,多线程可以让多人访问如下:

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Demo6 extends Thread{
Socket socket;
public Demo6(Socket socket) {
// TODO Auto-generated constructor stub
this.socket = socket;
} public void run() {
try {
OutputStream outputStream= socket.getOutputStream();
outputStream.write("<html><head><title></title><body>小姐姐,么么哒!</body></head></html>".getBytes());
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) throws IOException {
ServerSocket serversocket = new ServerSocket(9090);
while(true) {
Socket socket = serversocket.accept();
new Demo6(socket).start();
}
}
}

 
 

Day 22:网络编程(3)的更多相关文章

  1. 22 网络编程--TCP和UDP实现聊天例子

    1.TCP简单的一次对话,单通信 客户端: import socket HOST = 'localhost' PORT = 50006 client = socket.socket(socket.AF ...

  2. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  3. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  4. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  5. python之网络编程

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...

  6. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  7. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  8. [转]12篇学通C#网络编程——第二篇 HTTP应用编程(上)

    本文转自:http://www.cnblogs.com/huangxincheng/archive/2012/01/09/2316745.html 我们学习网络编程最熟悉的莫过于Http,好,我们就从 ...

  9. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  10. Python开发【第八篇】:网络编程 Socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

随机推荐

  1. 指定GPU运行python程序

    一.命令行运行python程序时 1.首先查看哪些GPU空闲,nvidia-smi显示当前GPU使用情况. nvidia-smi 2.然后指定空闲的GPU运行python程序. CUDA_VISIBL ...

  2. lambda表达式和for_each,find_if

    1 lambda表达式可以允许我传递任意可调用对象,必须要有捕获列表和函数体,标准形式是[捕获列表] (参数列表)->return tpye{函数体} 谓词:一元谓词指的是只能接受一个传入参数, ...

  3. NO16 第二关课后考试-aw-F-过滤已知的一级目录

    ·总结的经验:1.学会总结时学好运维的重要前提.2.通过案列或例子来总结一个技术点或者命令.3.画一张逻辑图,形象的卡通记忆这个知识技术点.4.通过管道过滤数据时,最好先输出结果,然后回退再使用管道看 ...

  4. Java入门基础(类的方法)

    方法 1.添加方法 方法表示一个类能做什么.在Java里,方法和属性属于对等的术语,在一个类中,不仅可以添加属性,还可以添加方法. 类 { 属性:描述“我有什么” 方法:描述“我能做什么” } 例子: ...

  5. PHP开发环境(Apache+mysql+PHPstorm+php)的搭建

    一.搭建思路 从浏览器到web服务器(Apache)到PHP环境到mysql数据库 二.环境搭建 1.浏览器(略) 2.Apache的安装与配置 1)官方下载地址:https://httpd.apac ...

  6. 2-10 就业课(2.0)-oozie:6、通过oozie执行mr任务,以及执行sqoop任务的解决思路

    执行sqoop任务的解决思路(目前的问题是sqoop只安装在node03上,而oozie会随机分配一个节点来执行任务): ======================================= ...

  7. 数学软件实训1-MATLAB程序设计及应用初步

    数学软件实训任务一 一 题目:MATLAB程序设计及应用初步 二 目的:掌握MATLAB程序设计的基本方法,会利用MATLAB程序设计思想编程处理一些简单问题. 三 要求: 1 掌握控制流的基本语法结 ...

  8. 剑指offer 数组中重复的数

    在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的数组{ ...

  9. 005.Oracle数据库 , 查询多字段连接合并,并添加文本内容

    /*Oracle数据库查询日期在两者之间*/ SELECT PKID , OCCUR_DATE, PKID || ' 曾经沧海难为水 ' ||TO_CHAR( OCCUR_DATE, ' yyyy/m ...

  10. 010、MySQL日期时间戳转化为文本日期时间

    #时间戳转化文本时间 SELECT from_unixtime( unix_timestamp( curdate( ) ) ); #时间戳转化文本时间格式化 SELECT from_unixtime( ...