当前位置:首页 » 编程软件 » tcp编程

tcp编程

发布时间: 2022-01-08 20:07:16

A. 当使用tcp协议编程时,哪些问题是程序员考虑和处理的

发送数据的格式和应用协议。

一旦双方建立了TCP连接,连接中的任何一方都能向对方发送数据并接收对方发来的数据。

发送数据时,程序员可以编写程序不断地将数据流写入TCP的发送缓冲区中,然后TCP自动从发送缓冲区中取出一定量的数据流写入TCP的发送缓冲区中,然后TCP自动从发送缓冲区中取出一定量的数据,将其组成TCP报文段逐个发送给IP层,再通过IP层发送出去。

接收端从IP层收到TCP报文段后,将其暂时保存在接收缓冲区中,这时程序员就可以编写程序依次读取接收缓冲区中的数据,从而达到通信的目的。



(1)tcp编程扩展阅读

利用TcpClient和TcpListener在同步方式下接收、发送数据及监听客户端连接时,在操作没有完成之前一直处于阻塞状态,这在接收、发送数据量不大或者操作用时较短的情况下是比较方便的。

但是,对于那些完成时间可能较长(如传送大文件)的任务时,使用同步操作可能就会造成系统假死,这种情况下,最好的办法是使用异步操作。

B. TCP应用编程的异步TCP应用编程

利用TcpClient和TcpListener在同步方式下接收、发送数据及监听客户端连接时,在操作没有完成之前一直处于阻塞状态,这在接收、发送数据量不大或者操作用时较短的情况下是比较方便的。但是,对于那些完成时间可能较长(如传送大文件)的任务时,使用同步操作可能就会造成系统假死,这种情况下,最好的办法是使用异步操作。 所谓异步操作方式,就是我们希望让某个工作开始以后,能在这个工作尚未完成的时候继续处理其他工作。
这里举一个是常生活的例子来说明:我们(主线程)安排A(子线程A)负责处理客人来访登记工作,在同步方式下,如果没有人来访,A就只能一直呆在某个房间等待,而不能从事其他工作,显然这种方式不利于并行处理。我们希望,没有人来访时,A不一定在这个房间等待,也可以到别处继续做其他工作,而把等待这个工作交给总控室人员完成。这个总控室就是Windows系统本身,总控室如何及时通知A呢?可以让A先告诉总控人员一个手机号F(callback需要的方法名F),以便有人来访时可以立即给A打电话(通过委托自动运行F),A接到通知后,再回来处理客人来访登记事务。
异步操作最大的优点是可以在一个操作没完成之前进行其他操作。.NET框架提供一种称为AsyncCallback(异步回调)的委托,该委托允许启动异步的功能,并在条件具备时调用提供的回调方法(是一种在操作或活动完成时由委托自动调用的方法),然后在这个方法中完成并结束未完成的工作。
在异步操作方式下,每个Begin方法都有一个匹配的End方法。编写程序时利用Begin方法开始执行异步操作,然后由委托在条件具备时调用End方法完成并结束异步操作。 在现实工作中,有很多工作是相互的,某些工作必须等待另一个工作完成后才能继续,这就是异步操作中的同步问题。在System.Threading命名空间中, 有一个EventWaitHandle类,用于在异步操作中控制线程的同步,即控制一个或多个线程继续执行或等待其他线程完成。EventWaitHandle类可以让操作系统通过发出信号完成多个线程间的同步,需要同步的线程可以先阻塞当前线程,然后根据Windows操作系统发出的信号,决定是继续阻塞还是等待其他工作完成,还是不再等待而直接继续执行。
EventWaitHandle类提供以下方法进行线程控制:
Reset方法:将信息状态设置为非终止状态,即不让操作系统发出信号,从而使那些只能接收到信号才能继续执行的线程处于阻塞状态。
Set方法:将事件状态设置为终止状态,这样的等待的线程将会收到信号,从而由等待转为继续。
WaitOne方法:阻塞当前线程,等待操作系统发出信号,直到收到信号才解除阻塞。
操作系统发出信号的方式有两种:
(1)发出一个信号,使某个等待信号的线程解除阻塞,继续执行。
(2)发出一个信号,使所有等待信号的线程全部解除阻塞,继续执行。 AsyncCallback委托用于引用异步操作完成时调用的 回调方法。在异步操作方式下,由于程序可以在启动异步操作后继续执行其他代码,因此必须有一种机制,以保证该异步操作完成时能及时通过调用者。可以通过AsyncCallback委托实现这种机制。
异步操作的每一个方法都有一个Begin...方法和End...方法,程序调用Begin...方法时,系统会自动在线程池中创建对应的线程进行异步操作,从而保证调用方和被调用方同时执行,当线程池中的Begin...方法执行完毕时,会自动通过AsyncCallback委托调用在Begin...方法的参数中指定的回调方法。
回调方法是在程序中事先定义的,在回调方法中,通过End...方法获取Begin...方法的返回值和所有输入/输出的参数,从而达到完成参数传递的目的。

C. tcpip编程用什么语言

这个问题说的不清楚:你想问的是使用TCP/IP编程,还是要编程实现(改变)TCP/IP
前者:几乎任何常见的计算机语言,包括但不限于C、C++、C#、Java、PHP、TCL……
后者:对于一般用户太困难,一个完整的协议栈差不多是半个操作系统了。如果是做网络试验可以用Linux+gcc或者Windows+DDK

D. TCP 客户端编程问题

client.cpp

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main() {

// 初始化 Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");

// 建立socket socket.
SOCKET client;
client = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( client == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}

// 连接到服务器.
sockaddr_in clientService;

clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 27015 );

if ( connect( client, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
}

// 发送并接收数据.
int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[32] = "Client: Sending data.";
char recvbuf[32] = "";

bytesSent = send( client, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );

while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( client, recvbuf, 32, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
printf( "Connection Closed.\n");
break;
}
if (bytesRecv < 0)
return;
printf( "Bytes Recv: %ld\n", bytesRecv );
}

return;
}

E. 最近开始学习TCP/IP 编程,因为原来C语言学的不是很好,所以想问一下,TCP/IP编程是用什么软件操作的

TCP/IP本身计算机网络通信领域的问题,它本身不是编程。
而你说的编程可能有两种意思,
一、如果实现TCP/IP协议。
二、如何实现具有网络通信功能的应用程序。

第一种情况,一般人是不需要的。
第二种情况,建议阅读与网络协议相关的图书。最重要的是网络“套接字”。它提供的应用程序进行网络通信的一套方法。不过它也不需要直接了解TCP/IP。

而C语言学习呢,不需要学习的非常好,只要清楚知道,函数、变量、结构体,各种选择语句、循环语句,各种表达式即可。

F. TCP编程的特点是什么

你必须掌握 SOCKET 套接字编程!它分为服务器端和客户端代码。两端代码不一样,有 bind、listen、accept,......,等等网络原语。参见“TCP/IP高级编程”。

G. TCP/IP编程有什么用啊

TCP/IP、Http、Soap都是基本的通讯协议。楼主若是行内人士一定知道这些。这里我不妨多说几句。
通讯协议即网络中(包括互联网、局域网)传递、管理信息的一些规范。常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议、SOAP协议等。在局域网中用得的比较多的是IPX/SPX。用户如果访问Internet,则必须在网络协议中添加TCP/IP协议。

TCP/IP是“transmission Control Protocol/Internet Protocol”的简写,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是INTERNET的基础协议,也是一种电脑数据打包和寻址的标准方法.假设服务器、实现网络通信(比如聊天),不管你是.NET还是其他,一定要了解TCP/IP。

在WEB编程中,服务端是指提供HTTP服务的部分,客户端是指你使用的浏览器。HTTP协议就是实现客户端和服务器端的通讯。简单说就是请求与响应,你提交了什么,返回个什么都可以在HTTP里规范。举个例子,用户在WEB页上看到自己的客户端信息实际是HTTP的2次通讯。

SOAP(Simple Object Access Protocal,简单对象访问协议) 技术有助于实现大量异构程序和平台之间的互操作性,根据我有限的了解,SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。比如我们.NET中的WEB服务,就是基于SOAP

简单说就是这样,每一种通讯协议都很复杂,建议楼主多了解HTTP和SOAP

H. TCP网络编程有什么特点

TCP编程和各基本的编程没有多大区别,主要的区别在于其中使用函数全是操作系统提供的

Tcp是一种面向连接的,可靠的字节流服务。(设有数据包编号与差错控制机制。)

特点:

由于网络的复杂性,传输信息时,数据包可能会丢失,差错控制中的确认机制在接收到数据包是发送确认信息,若是数据包丢失,则回发数据包编号,让对方重新发送;

由于网络的复杂性,传输信息时有多种网络传送途径可以选择,数据包被接收的顺序与发送顺序不同,可以根据数据包的编号,将数据包重组。

优点:网络连接是以点对点的形式,加上上述特点,保证了数据的安全性,数据包不会中途被劫。

缺点:耗费资源很多

补充:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

I. TCP编程和UDP编程的主要区别是什么

tcp和udp从协议上的主要区别是:tcp是可靠的,流时的,但是链接建立比较“重”,需要三次握手,udp不能保证数据一定到达接收方,并且数据包并不能保证按照发送方的顺序接收。编程上的区别应该并不大,因为底层的API都屏蔽了协议上的差别。

热点内容
python二维 发布:2024-09-21 08:40:05 浏览:231
安卓电视上如何下载电视家 发布:2024-09-21 08:29:57 浏览:293
php字符串引号 发布:2024-09-21 08:17:03 浏览:783
androidduration 发布:2024-09-21 08:17:03 浏览:402
大话西游2华山论剑什么时候开的服务器 发布:2024-09-21 08:00:15 浏览:530
编程马鞍数 发布:2024-09-21 07:48:32 浏览:726
新建文件夹dos命令 发布:2024-09-21 07:44:13 浏览:131
舞蹈解压介绍 发布:2024-09-21 07:40:04 浏览:973
qq如何显示密码 发布:2024-09-21 07:22:26 浏览:566
安卓导航如何调大mlc音量 发布:2024-09-21 06:59:21 浏览:34