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. 信号强度(RSSI)知识整理

    来源: https://www.cnblogs.com/lele/articles/2832885.html 为什么无线信号(RSSI)是负值 答:其实归根到底为什么接收的无线信号是负值,这样子是不是 ...

  2. 转:NGINX 基于nginx_upstream_check_module-master 健康检测及平滑升级

    https://www.cnblogs.com/linxizhifeng/p/7075325.html linux的nginx下安装tengine的nginx_upstream_check_modul ...

  3. PCA算法提取人脸识别特征脸(降噪)

    PCA算法可以使得高维数据(mxn)降到低维,而在整个降维的过程中会丢失一定的信息,也会因此而实现降噪除噪的效果,另外,它通过降维可以计算出原本数据集的主成分分量Wk矩阵(kxn),如果将其作为数据样 ...

  4. SciPy 介绍

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  5. 2018--Linux面试题

    1.企业场景面试题:buffer与Cache的区别. 2.企业场景面试题:redhat与CentOS的区别. 3.企业场景面试题:  描述RAID 0 1 5 10的特点. 4.企业场景面试题:32位 ...

  6. Bar Chart _Study

    ---恢复内容开始--- 以“3D BarChart”为例. 1.Select a theme.(选择一个主题模板) 2.Set up categories and groups.(设置类型和组) 3 ...

  7. windows制作动态链接库和使用一

    制作: //myDll.h _declspec(dllexport) int add(int a,int b); _declspec(dllexport) int sub(int a,int b); ...

  8. MySQL 批量更新、删除数据shell脚本

    #!/bin/bash. ~/.bash_profilelog=/tmp/update_log_1_$(date +%F).logvstart=1step=100vstop=$((${vstart}+ ...

  9. 使用JS写一个计算器

    先上效果图: 简单的加减乘除功能还是有的,所以我们就考虑怎么来实现这个功能. 根据预期效果,可以确定页面中的布局要用到table tr td. 所以先放上页面布局,table的边框宽度border,c ...

  10. R语言 方差稳定化变换与线性变换 《回归分析与线性统计模型》page96

    > rm(list = ls()) > A=read.csv("data96.csv") > A Y N 1 11 0.0950 2 7 0.1920 3 7 0 ...