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. 用Word编辑cnblogs的博文并发布

    听说可以用Word直接编辑文件发布博客,请教加研究,终于配置成功,先分享如下: 1. 在www.cnblogs.com上注册用户. 2. 打开Word,选择博客文章 3. 点击管理账户,新建或更改,按 ...

  2. puppet多环境配置(puppet自动化系列2)

    三.Puppet多环境部署 我们为puppetmaster建立3个环境,它们分别是开发环境(jqdev).测试环境(jqtest).生产环境(jqprd). 3.1 配置puppet.conf 在标签 ...

  3. AD9 如何画4层pcb板

    新建的PCB文件默认的是2层板,教你怎么设置4层甚至更多层板. 在工具栏点击Design-->Layer Stack Manager.进入之后显示的是两层板,添加为4层板,一般是先点top la ...

  4. shell入门-系统和用户的配置文件

    变量分为系统变量和用户自定义变量,他们的配置文件当然分为系统环境变量配置文件和用户环境变量控制文件 1.规定环境变量的配置文件 [root@wangshaojun 111]# vim /etc/pro ...

  5. KickStart安装CentOS,同时安装和配置hadoop

    声明:这篇文章是前面是拾人牙慧,我是结合 http://www.111cn.net/sys/linux/59969.htm 和 http://www.cnblogs.com/mchina/p/cent ...

  6. 基于MapReduce的矩阵乘法

    参考:http://blog.csdn.net/xyilu/article/details/9066973文章 文字未得及得总结,明天再写文字,先贴代码 package matrix; import ...

  7. Entity Framework Code-First(9.2):DataAnnotations - TimeStamp Attribute

    DataAnnotations - TimeStamp Attribute: TimeStamp attribute can be applied to only one byte array pro ...

  8. final注意事项

    final修饰的类为终态类,不能被继承,而 抽象类是必须被继承的才有其意义的,因此,final是不能用来修饰抽象类的. final修饰的方法为终态方法,不能被重写.而继承抽象类,必须重写其方法. 抽象 ...

  9. ZOJ 3939 The Lucky Week (暴力找规律)

    题意:给定一个幸运日,求第 k 个幸运日是多少. 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力. 代码如下: #pragma comme ...

  10. C# Object reference not set to an instance of an object.

    一.问题 Object reference not set to an instance of an object. (你调用的对象是空的) 二.解决问题 在使用 c# 的查询时,先筛选后在关联其他表 ...