1.TCP程序概述

TCP是一个可靠的协议,面向连接的协议。

实现TCP程序,需要编写服务器和客户端,Java API为我们提供了java.net包,为实现网络应用程序提供类。

ServerSocket:此类实现服务器套接字。

Socket:此类实现客户端套接字(也可以就叫"套接字")。

Socket是网络驱动层提供给应用程序编程的接口和一种机制。

2.数据发送过程

3.数据接收过程

4.实现服务器端与客户端程序

服务器端:

public class ServerSocket extends Object

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

ServerSocket(int port)

        创建绑定到特定端口的服务器套接字。

void setSoTimeout(int timeout)

        通过指定超时值启用/禁用so_TIMEOUT

以毫秒为单位

InetAddressgetInetAddress()

        返回此服务器套接字的本地地址

Socket accept()

        侦听并接受到此套接字的连接

客户端:

public class Socket extends Object

此类实现客户端套接字(也可以就叫"套接字")。套接字是两台机器间通信的端点。

Socket(String host,int port)

        创建一个流套接字并将其连接到指定主机上的指定端口号。

InputStreamgetInputStream()

        返回此套接字的输入流

OutputStreamgetOutputStream()

        返回此套接字的输出流

void setSoTimeout(int timeout)

        启用/禁用带有指定超时值的

    so_TIMEOUT,以毫秒为单位

package com.vince;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket; /**
* 服务器端代码
* @author Administrator
*
*/
public class EchoServerDemo { public static void main(String[] args) {
try {
//端口号从1024~65535
ServerSocket ss=new ServerSocket(8000);
System.out.println("服务器已启动,正在等待连接...");
Socket socket=ss.accept();//等待客户端连接,该方法会阻塞
InputStream input=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(input));
String info=br.readLine();
System.out.println(info);
OutputStream output=socket.getOutputStream();
PrintStream ps=new PrintStream(output);
ps.println("echo:"+info);
output.close();
input.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} }
package com.vince;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端代码
* @author Administrator
*
*/
public class EchoClientDemo { public static void main(String[] args) {
//连接服务器
try {
Socket socket=new Socket("localhost",8000);
System.out.println("连接成功!");
OutputStream out=socket.getOutputStream();
InputStream in=socket.getInputStream();
PrintStream ps=new PrintStream(out);
ps.println("hello");
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String info=br.readLine();
System.out.println(info);
out.close();
in.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} } }

网络编程——TCP协议的更多相关文章

  1. 网络编程TCP协议-聊天室

    网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...

  2. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

  3. 基于网络编程 TCP协议 及 socket 基本语法

    socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...

  4. python 网络编程 -- Tcp协议

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 大多数连接都是可靠 ...

  5. 网络编程——TCP协议的三次握手和四次挥手

    三次握手原理解析 TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND ...

  6. 网络编程——TCP协议和通信

    第1章 TCP通信 TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象. 区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地 ...

  7. 网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

    TCP协议:传输协议,基于端口工作 三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立 ...

  8. python网络编程-TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  9. Java网络编程(TCP协议-练习-上传文本文件)

    客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...

随机推荐

  1. 【转】LCS

    动态规划法 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加. 为了节 ...

  2. html中插入css和js

    插入css: HTML周明华添加css样式的方法有很多种,常见的有一下几种:. 1.直接标签后添加如: <html> <div style="background:red; ...

  3. 排序----demo----

    排序1---冒泡法: 单向冒泡排序的基本原理就是:对于给定的n个数据,从第一个数据开始一次对相邻的两个数据进行比较,当前面的数据大于后面的数据时,交换位置,进行一轮比较和换位后,n个数据中最大的那个被 ...

  4. JavaScript之JMap

    在JavaScript中我们利用function类定义类在类的内部我们用var 定义私有变量 私有函数在类的内部我们用this 定义公有变量(1)定义一个类 function JMap() { var ...

  5. 问题:OAuth1.0;结果:OAuth1.0协议

    OAuth1.0协议 概要 OAuth提供了一种client代表资源的拥有者访问server的方法,也就是在资源拥有者不向第三方提供证书(通常是指用户名和密码)的情况下,允许第三方使用用户代理重定向访 ...

  6. BIOS MCSDK 2.0 User Guide - Acronyms and Definitions

    BIOS MCSDK 2.0 User Guide - Texas Instruments Wiki Acronyms and Definitions The following acronyms a ...

  7. cc和gcc

    cc就是一个链接文件连接到gcc中.只不过cc是unix中常用的编辑工具,而在linux中用的gcc.有一些在unix中写好的程序要放在linux中,所以要指定命令cc为gcc,其实一样.用where ...

  8. 【转】ANT安装、环境变量配置及验证

    http://www.cnblogs.com/yuzhongwusan/archive/2013/03/26/2982411.html Posted on 2013-03-26 14:01 yuzho ...

  9. C# - char类型的一些介绍

    Char C#里面的char,其实就是System.Char类型的别名,它代表一个Unicode字符(是这样吗?),占用两个字节. 例如:char c = ‘A’; char占用两个字节,也就是16位 ...

  10. 第三章 Goroutine调度策略(16)

    本文是<Go语言调度器源代码情景分析>系列的第16篇,也是第三章<Goroutine调度策略>的第1小节. 在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代 ...