网络编程----------SOCKET编程实现简单的TCP协议

首先我们需要大致了解TCP的几点知识:

1.TCP的特点:面向连接的可靠性传输

2.TCP的三次握手建立连接和四次挥手释放连接,但为什么TCP要三次握手建立连接呢?

答:因为两次握手无法保证可靠性,若最后一次失败,则客户端又会重新发起建立连接的请求,那么必然会消耗资源,而三次握手明显能够达到这个目的。

3.TCP为何是面向连接的?

答:因为TCP是传输层的协议,传输层的下层是网络层,IP协议就是网络层的协议,但是IP只提供尽力而为的的传输机制;而传输层的上层为应用层,它负责将下层的数据拿出来,所以此时数据的可靠性得责任保障毋庸置疑就落到了传输层的TCP协议上(同层的udp不负责数据的检错等功能)。而可靠性保障的前提条件就是面向连接。

4.TCP的可靠性传输机制由谁来保证?

答:TCP报文段格式中有32位序号和32位确认序号两部分,所以可靠性明显是由这两部分来保证的。

5.与TCP相关的定时器有哪些?

答:有四种:(1)重传定时器:解决超时重传的问题

(2)坚持定时器:解决零窗口大小导致的死锁问题

(3)保活定时器:解决两个TCP连接间出现长时间的没有数据传输的情况 

(4)2MSL定时器:测量一个连接处于TIME-WAIT的时间。(当服务器断开连接的时候,若新的客户端再去请求断端口连接,那么服务器断会处在TIME-WAIT等待原客户端再次请求连接。

好了,以上就是有关TCP的小点但有必要知道的。哈哈!

下面,我们利用socket进行简单的TCP编程

那我们常说的socket到底是什么呢?没错就是我们熟知的------------》IP地址+端口号=socket

首先先来学习一下基本的函数

好了!正式贴出代码了!

服务器端tcp_server.c

Makefile文件:

客户端代码tcp_client.c:

时间: 03-27

网络编程----------SOCKET编程实现简单的TCP协议的相关文章

VC++6.0网络编程Socket编程(转)

从csdn上下载的该软件的教程: 作为一个初学者,深感Socket编程入门的困难,但当把一些问题弄懂之后,回过头来看以前遇到的一些问题,才发现 Socket编程其实并没有那么复杂.接下来我就把我遇到的一些困难讲述下,并补上解决的办法. 首先我们要想实现一个简单的点对点网络通信,就应该有一个客户和一个服务器 我们先来做客户端.先按照如下图所示建立好客户对话框模块: 首先创建一个基于MFC AppWizard[EXE] 工程,工程名为Socket__002 (这里是以我的工程名为准,你们也可以自己命

Linux网络之socket编程 (1)

在谈到socket编程之前,首先我们要知道一点预备知识. 预备知识: 1.网路字节序全部采用大端字节序. 关于字节序的详解,戳链接 查看,这里不做解释. 2.在编程之前,我们有必要了解,什么是socket? socket,又叫做套接字.我们都应该知道,在网络中,IP地址+ 端口号,可以唯一表示互联网中的一个进程,因此,我们将  IP地址+端口号 称为socket. socket API是一套抽象的网络编程接口,适用于各种底层网络协议,包括IPv4,IPv6以及UNIX Domain Socket

java基础知识回顾之java Socket学习(一)--TCP协议编程

TCP传输(传输控制协议):TCP协议是一种面向连接的,可靠的字节流服务.当客户端和服务器端彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能进行数据的传输.它将一台主机发出的字节流无差错的发送到互联网的其它主机.在发送端负责把上层传下来的字节流分成报文段传递给下层.在接收端负责把报文重组后交给上层.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端.

python网络编程-socket编程

socket中TCP的三次握手建立连接详解 我们知道tcp建立连接要进行"三次握手",即交换三个分组. 流程如下: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户端再想服务器发一个确认ACK K+1 只有就完了三次握手,但是这个三次握手发生在socket的那几个函数中呢?请看下图: 图1.socket中发送的TCP三次握手 从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时con

java 网络编程Socket编程

Server.java import java.io.*; import java.net.*; public class Server { public static void main(String args[]) { String [] answer ={"南非","进入世界杯了","哈哈...问题真逗!"}; ServerSocket serverForClient=null; Socket socketOnServer=null; Da

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

(四十七)socket编程——socket引入、网络字节序、IP地址转换函数、sockaddr数据结构介绍

一.什么是socket socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,为TCP/

基于TCP的socket 编程

一.对socket的理解 1.socket本身有"插座"的意思,因此用来描述网络连接的一对一关系. 2.在TCP/IP协议中,"IP地址+TCP/UDP端口号"唯一标识网络通信中的一个进程,"IP地址+端口号"就称为socket. 3.在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socketpair 就唯一标志一个连接. 二.网络数据流 网络数据流有大端和小端之分.发送主机通常将发送缓冲区中的数据按

Socket编程一实现简易的聊天功能以及文件传输

干程序是一件枯燥重复的事,每当感到内心浮躁的时候,我就会找小说来看.我从小就喜爱看武侠小说,一直有着武侠梦.从金庸,古龙,梁羽生系列到凤歌(昆仑),孙晓(英雄志)以及萧鼎的(诛仙)让我领略着不一样的江湖. 如果你有好看的武侠系列小说,给我留言哦.题外话就扯这么多了,接着还是上技术. 看看今天实现的功能效果图: 可以这里使用多台手机进行通讯,[凤歌]我采用的服务器发送消息. 是不是只有发送消息,有些显得太单调了.好,在发送消息的基础上增加文件传输.后期会增加视频,音频的传输,增加表情包.那一起来看