---------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------

1. TCP/IP

1.概述

要建立连接,可以传输大量数据  通过三次握手玩成连接是可靠协议   必须建立连接,效率低,例如:下载,打电话

步骤:Socket和ServerSocket

简介:建立客户端和服务器端

通过Socket中的IO流进行数据传输

关闭socket

同样,客户端和服务器端是两个独立的应用程序

2.传输

客户端(Socket)和服务器端(ServerSocket)

客户端:在该对象创建的时候,就指定了主机地址,因为要先TCP必须要建立好连接,进行传输,或者使用connet方法来制定端口

客户端对象里面封装了字节读取流和写入流。这样更方便发送和接受数据。不断是服务端还是客户端,只要是对其传输的数据进行访问,那么就在Socket对象中获取流。

步骤:

1.创建服务,指定连接的主机和端口

2.获得输出流 然后输出数据

3.关闭服务

服务端:

1建立服务端的服务,ServerSocket,绑定端口

2获取连接过来的客户端对象 ServerSocket的accept方法。

3客户端如果发过来数据,那么服务端要使用对应的客户端对象,然后客户端对象的读取流来读取发过来的数据,打印在控制台上

4关闭服务端。

3.单向发出和读取

模拟客户端向服务端发数据,服务端读取客户端发送的数据后,然后输出。

 import java.io.OutputStream;
import java.net.Socket;
/**
* 客户端
* 1.定义服务端服务,指定目的地址和端口号
* 2.获得写入流,然后发发送的数据,并且发出
* 3.关闭客户端
*
*/
public class CilentTcp {
public static void main(String[] args) throws Exception{
/*创建了客户端服务,并且指定目的主机和端口号*/
Socket client=new Socket("192.168.1.101",10005);
/*获取输出流,用来发送数据*/
OutputStream out=client.getOutputStream();
out.write("hello world".getBytes());
client.close();
} }
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
* 1.定义服务端,然后指定服务端口
* 2.使用accept()方法获得客户端对象,然后获取读取流
* 3.然后读取客户端发送的数据
*/
public class ServerTcp {
public static void main(String[] args) throws Exception {
/* 创建了服务端,并且指定端口号 */
ServerSocket server = new ServerSocket(10005);
Socket socket = server.accept();// 获得了发送端对象
InputStream in = socket.getInputStream();// 获得读取流,用来读取发送端发送过来的数据
byte[] buf = new byte[1024];
int r = in.read(buf);//读取
System.out.println(new String(buf, 0, r));
} } 结果:
hello world

必须要先启动服务端,然后运行客户端,否则会连接失败

2. 客户端和服务端互访

客户端:

步骤:

1.建立Socket服务,并且指定要连接的主机和端口。

2.获得Socket流中的输出流,将数据写到流中,通过网络发送给服务端

3.获取Socket流中的输入流,将服务端反馈回来的数据获取到,并且打印

4.关闭客户端资源

mportjava.io.InputStream;
importjava.io.OutputStream;
import java.net.Socket;
importjava.net.InetAddress;
/**
* 客戶端
*/
public class ClientTcp {
public static void main(String[]args) throws Exception {
/*获得客户端服务*/
Socketclient = new Socket("192.168.32.17", 25000);
/*
* 获得客户端流中的输出流,并且把数据写到流中,然后传给的服务端
*/
OutputStreamout = client.getOutputStream();
out.write("服务端,你在吗".getBytes());
/**
* 获得客户端总的输出流,然后或得服务端反馈回来的数据,并且打印
*/
InputStreamin=client.getInputStream();
byte [] buf=new byte[1024];
int len=in.read(buf);
System.out.println(newString(buf,0,len));
client.close();
} }

服务端:

步骤:

1.建立ServerSocket服务,并且指定端口号。

2.获得客户端服务对象,输出客户端的地址

3.获得客户端的输入流,读取客户端发送的数据,并且打印。

4.获得客户端的输出流,给客户端发送反馈信息。

5.关闭服务端服务和客户端服务。

import java.io.InputStream;
importjava.io.OutputStream;
importjava.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*/
public class ServerTcp {
public static void main(String[]args) throws Exception {
/* 创建了服务端,并且指定端口号 */
ServerSocketserver = new ServerSocket(25000);
Socketsocket =server.accept();// 获得了发送端对象
System.out.println(socket.getLocalAddress()+"connectsuccess");
/**
* 或得客户端的输入流,读取客户端发送的数据,并且打印
*/
InputStreamin = socket.getInputStream();// 获得读取流,用来读取发送端发送过来的数据
byte[] buf = new byte[1024];
int r = in.read(buf);// 读取
System.out.println(new String(buf, 0,r));
/**
* 获得客户端的输出流,给客户端反馈信息
*/
OutputStream out=socket.getOutputStream();
out.write("客户端,我在呢?要干嘛啊!!".getBytes());
socket.close();
server.close();
}
}

accept()和read()方法都是阻塞方法。

对于双方都通信的话,那么循环读取的话,用到IO读取,那么必须注意换行符,和刷新缓冲区。通常都是读取一行的话,那么要注意是否有换行符,newLine().

3.  上传文件

在网络传输文件

客户端:

步骤:1.定义服务端,同样也要指定目标地址和端口号。

2.定义对文件相应的流,读取文件。

3.获取客户端的输出流,和文件的读取交替读取和写入。

4.获得客户端的输入流,获取服务端反馈的信息。

 package www.fuxi.wangluo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 客户端
* @author yang
*/
public class TextClient {
public static void main(String[] args) throws Exception{
Socket socket=new Socket("192.168.1.101",25001);
/**
* 获得文件的读取流,然后循环的读取文件
*/
BufferedReader br=new BufferedReader(new FileReader("copy.txt"));
/**
* 获得服务端的输入流,用来把要复制的文件内容,输入到网络流中
*/
PrintWriter pr=newPrintWriter(socket.getOutputStream(),true);//true代表自动刷新 String line=null;
while((line=br.readLine())!=null){
pr.println(line);//println有自动刷新功能
}
socket.shutdownOutput();//关闭客户端的输出流,相当于结束标记 /**
* 获得文件的输出流,用来获得服务端反馈的信息
*/
BufferedReader brs=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str=null;
str=brs.readLine();
System.out.println(str); brs.close();
br.close();
socket.close();
} }

服务端:

步骤:1.定义服务端服务,然后指定端口号。

2.获得客户端对象,然后从中获取读取流。

3.定义新文件的写入流,这样把读取流中的内容写入到新文件中。

4.获得客户端的写入流,反馈给客户端信息。

package www.fuxi.wangluo;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*/
public class TextServer {
public static void main(String[] args) throws Exception {
/**
* 定义服务端,然后获得客户端服务对象
*/
ServerSocket server = new ServerSocket(25001);
Socket socket=server.accept();
/**
* 获得客户端的读取流,这样读取文件内容
*/
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
/**
* 获得目标文件的写入流,用来写入文件内容
*/
PrintWriter pr=new PrintWriter(new FileWriter("newCopy.txt"),true);
String line=null;
while((line=br.readLine())!=null){
pr.println(line);
}
/**
* 获得客户端的写入流,这样把信息反馈给客户端
*/
PrintWriter prs=new PrintWriter(socket.getOutputStream());
prs.println("上传成功!");
pr.close();
prs.close();
br.close();
server.close();
} } 结果:上传成功

注意点:一定要定义结束标记,否则会不会停止上传,结束标记可以自定义,也可以使用Socket中自带的方法来结束。

---------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------

黑马程序员_<<TCP>>的更多相关文章

  1. 黑马程序员_<<String类>>

    --------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. String类 1.概述 String ...

  2. 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

    黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...

  3. 2016年8月17日 内省(1)18_黑马程序员_使用beanUtils操纵javabean

    8.内省(1):18_黑马程序员_使用beanUtils操纵javabean 1.导入两个包: 2.调用静态方法. 9.泛型 map.entrySet() :取出map集合的键值对组成一个set集合. ...

  4. 黑马程序员_高新技术之javaBean,注解,类加载器

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 第一部分 javaBean 一,由内省引出javaBean 1,内省: 内省对应 ...

  5. JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典

    总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...

  6. 黑马程序员_ JAVA中的多线程

    ------- android培训.java培训.期待与您交流! ---------- 尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节 ...

  7. 黑马程序员_ Objective-c 面向对象笔记详解

    1)类,对象,方法 类 类名: 1) 类名的第一个字母必须是大写 2) 不能有下划线 3) 多个英文单词,用驼峰标识 类的声明和实现 类的声明 @interface 类名 : NSObject { @ ...

  8. 黑马程序员_ Objective-c 概述及面向对象与三大特性

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ (一).语法概述 1. oc介绍:(.m文件) 1> c语言的基础上,增加 ...

  9. 黑马程序员_ Objective-c 之block、protocol学习笔记

    一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值, ...

  10. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...

随机推荐

  1. HDU 6166 Spfa

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6166 题意:给出一个n个点的有向图.然后给你k个点,求这k个点任意两点之间的最短路的最小值.思路: 以 ...

  2. 【BZOJ 3238】 3238: [Ahoi2013]差异(SAM)

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 3047  Solved: 1375 Description In ...

  3. [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 5838  Solved: 2345[Submit][Sta ...

  4. 【lct】poj2763 Housewife Wind

    题意:给你一棵树,边带权,支持两种操作:修改某条边的权值:查询两点之间的最短路. lct主要实现单点修改和路径和. 修改x结点的值只需将x Splay到其所在辅助树的根,然后修改其值,再maintai ...

  5. 对Java Serializable(序列化)的理解和总结(二)

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化 b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,ser ...

  6. SPFA cojs 176. [USACO Feb07] 奶牛聚会

    cojs 176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB N(1 ≤ ...

  7. python开发_python中的Boolean运算和真假值

    python中的真假值: Truth Value Testing Any object can be tested for truth value, for use in an if or while ...

  8. April Fools Day Contest 2016 E. Out of Controls

    E. Out of Controls 题目连接: http://www.codeforces.com/contest/656/problem/E Description You are given a ...

  9. Java---线程多(工作内存)和内存模型(主内存)分析

    首先解读Java内存模型(这里区别于JVM的内存模型,堆.栈.工作区) Java 内存模型来屏蔽掉各种硬件和操作系统的内存差异,达到跨平台的内存访问效果.JLS(Java语言规范)定义了一个统一的内存 ...

  10. HTML5 Plus移动App(5+App)开发入门指南

    HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和 ...