关于TCP以及SOCKET的一些疑问?求大神指教

问题描述

已知SOCKET通过传输层的TCP协议进行通信的话。TCP协议要进行三次握手过程。那么这三次握手过程是被封装到了SOCKET对象的Accept()方法里面了吗?三次握手协议是SERVER端专门监听端口的SOCKET完成的?还是ACCEPT方法生成的SOCKET来完成最后两次握手?因为无法直观得从代码上看到三次握手的过程,所以有点疑惑

解决方案

解决方案二:
引用楼主u012159928的回复:

三次握手协议是SERVER端专门监听端口的SOCKET完成的?还是ACCEPT方法生成的SOCKET来完成最后两次握手?

应该是在监听端口的SOCKET上完成的。因为:1、Socket.Accept得到一个已建立的连接(以下是英文链接,注意created中的过去式)引用MSDN关于Socket.Accept参考

CreatesanewSocketforanewlycreatedconnection.

2、根据Berkeleysocket的定义:引用http://en.wikipedia.org/wiki/Berkeley_sockets

Theaccept()functionreturnsthenewsocketdescriptorfortheacceptedconnection

3、根据试验(需要两台机器,以及WireShark等网络嗅听软件):staticvoidMain(){using(Socketlistener=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)){listener.Bind(newIPEndPoint(IPAddress.Any,5678));listener.Listen(3);listener.BeginAccept(OnAccepted,listener);Console.ReadLine();}}staticvoidOnAccepted(IAsyncResultir){Console.WriteLine("Checkiptrafficnow.3-wayhandshakeshouldhavealreadyhappended");Thread.Sleep(5000);SockettalkingSocket=(ir.AsyncStateasSocket).EndAccept(ir);Console.WriteLine("Gottheconnectedsocketfrom:{0}",talkingSocket.RemoteEndPoint);talkingSocket.Close();}

解决方案三:
有了服务器有了客户端能收能发就行了...其他的什么反正我不去管啦因为现在都封装好了..我们也没必要去深研究...
解决方案四:
又不需要你自己去写三次握手的代码,你管它到底是哪一步呢,反正都封装好了直接调用就行了不要太纠结底层,反正纠结完你也没能力去改,胡乱改反而会不如不改了还是把Accept到底怎么用研究明白更有实际意义
解决方案五:
还有,既然是通信,那是双方的事情,不是所有代码都在其中一方就能完成的那是客户端的connect和服务端的accept共同作用的结果而且绝对不是说所有代码都在一个方法里,后面用到了各种接口,异步回调,是很复杂的一个过程,但是你用的时候就只需要知道一个connect一个accept就行了
解决方案六:
本人也曾研究过,的确相当复杂,建议还是直接用封装好的东西,自己乱改,很容易改出问题,而且还不容易调试。
解决方案七:
你听说的3次握手是.net帮你完成的,它的连接,发送消息都会进行这3次“握手”

时间: 2024-10-22 03:21:29

关于TCP以及SOCKET的一些疑问?求大神指教的相关文章

如何用java线程池和socket实现群聊和私聊,求大神指教

问题描述 如何用java线程池和socket实现群聊和私聊,求大神指教 刚学习完javaSE,需要做一个小小的聊天软件,需要实现私聊和群聊的功能:本人觉得应当使用线程池和socket.IO流来实现,但不知道怎么做?求各位大神给点意见,不胜感激~ 解决方案 http://download.csdn.net/detail/z344310362/7579373 解决方案二: 群聊就是把消息发到一个聊天室,,私聊直接通过服务端发送给个人就行了 解决方案三: 我给你一个java聊天软件的参考吧:java聊

关于socket的问题,求大神解释一下以上代码,本人小白不太懂

问题描述 关于socket的问题,求大神解释一下以上代码,本人小白不太懂 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.nio.charset.Charset; impor

odel nd iew-新手求大神指教问题~~

问题描述 新手求大神指教问题~~ springMVC中ModelAndView类的用法(简单介绍下其作用) 解决方案 http://blog.163.com/fly_sky_java/blog/static/140422234201471911823491/ 解决方案二: 关于python的socket问题运行出错,新手求大神指教!!求大神指教 解决方案三: ModelAndView详解 解决方案四: Model指的是模型层,咱们最常用的就是javabean的各个层次.数据访问层用于做访问数据库

android-Android通过jtds连接sql,加载驱动程序出错,求大神指教

问题描述 Android通过jtds连接sql,加载驱动程序出错,求大神指教 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import android.app.Activity; import android.database.SQLException; import android.os.Bundle; impor

求大神指教,关于linux c语言发送post请求问题

问题描述 求大神指教,关于linux c语言发送post请求问题 http://www.360doc.com/content/14/0428/17/7256015_372968249.shtml 请大神帮忙看看这个网页上面的程序可行么,为什么我把其中的信息改为我自己的却不好使呢 解决方案 可能你的服务器是https的,加了ssh的交互信息,socket就不够用了,因为socket不支持ssh 解决方案二: 看下服务器respons的状态码 确认下是你的程序有问题还是其它原因

我是个学生,求大神指教!!!

问题描述 我是个学生,求大神指教!!! 题目是:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能#includeint input(int *p){ int i=0; do { scanf(""%d""p+i); i++; }while(*(p+i-1)!=-1);return i-1; }int* mv(int nint mint p){ int ib[100]*c=NULL; for(i=0;i<m;i++) {

css 样式 求教-求大神指教css样式前后对齐不上

问题描述 求大神指教css样式前后对齐不上 求大神,苦恼一上午了.增加了一个样式通知管理.老前后对其不上, </tr> 可惜c币不够.真心求教 Blockquote 解决方案 </tr>代码送上 解决方案二: 代码能看见吗 </tr> 解决方案三: 看不到代码..把左尖括号去掉后再发来看看 解决方案四: 我的建议是不要用标签属性来定义高宽等,容易受到干扰,改为样式试试 解决方案五: 只能看到一堆 红叉....... 解决方案六: 老兄,你的图--挂了-- 解决方案七:

图片-Eclipse编译Java文件出现空指针错误,求大神指教如何改正

问题描述 Eclipse编译Java文件出现空指针错误,求大神指教如何改正 另外出现错误的代码 主函数 public static void main(String[] args) { Login login = new Login(RELOAD); login.setVisible(true); } public Login() { super(); initialize(); } public Login(boolean reload) { super(); initialize(); ne

关于php实例化问题 求大神指教

问题描述 关于php实例化问题 求大神指教 我在入口文件里 写了这么一句实例化 $a = new applicationcontrollera();这是目录结构 其中入口文件 和 application都是在根目录下 为什么它说这个applicationcontrollera找不到 求解决 解决方案 你在入口文件require a.php 再new一个

c语言-C语言小白问题求大神指教

问题描述 C语言小白问题求大神指教 #include #include unsigned fun(int w) { int a; int i; i=1; a=w; while(a==0) { a=a/10; i++; } w=w%pow(10,i); return w; } unsigned main() { int w; printf("please enter a number:n"); scanf("%d",&w); printf("the