关于Socket的问题

问题描述

最近在做一个用java Socket编程实现CHAP协议的一个作业,我写的代码分为服务器端和客户端!服务器端启动后就进入监听连接状态:while(true) {try {Socket socket = chapServer.getServerSocket().accept();System.out.println("与" + socket.getInetAddress().toString().substring(1) + "链路建立成功");ServerThread thread = (ServerThread) XMLConfigReader.getInstance().getThreadBean("serverThread");thread.init(socket, chapServer.getName());thread.startNewChallenge();Date timeStart = new Date();while(true) {System.out.println("main线程");if((new Date().getTime() - timeStart.getTime()) % TIMEINTERVAL == 0) {System.out.println("-----------再次挑战-----------------");thread.startNewChallenge();}}} catch (IOException e) {e.printStackTrace();}}当客户端连接上服务器端后,服务器端和客户端就各自马上启动自己的线程,此时客户端就处于监听输入流的状态即代码执行到receive = dis.readUTF();,服务器这时马上向客户端发送一个挑战报文(挑战报文发送后,服务器端也进入到监听输入流的状态,等待客户端的相应报文),客户端接收到挑战报文后就像服务器端发送响应报文,然后服务器端接收到客户端的相应报文后,就验证客户端是否挑战成功,如果成功与否都向客户端发送响应的报文。我现在的问题是当服务器端发送挑战报文后,如果在传输的过程中报文丢失,那么客户端和服务器端此时都处于监听输入流状态,这时两边岂不都僵持在等待输入流的状态?那这个问题怎么解决?求解答,其实我这个是仿照写聊天室写的,是不是俺的思考方向错了?

解决方案

这是多线程通信需要解决的问题之一,就如同QQ上聊天一样,好友A看到B上线了:A:你好。B:你好。A:88B:88A,B下线。你说的情况就如同A说了“你好”,但B没有回答一样。A可以下线,也可以打电话去问问。在具体的多线程操作中,可能等一段时间退出,或者其他途径得到想要处理的数据。

时间: 2024-11-02 20:17:58

关于Socket的问题的相关文章

php使用socket编程的示例

 这篇文章主要介绍了php使用socket编程的示例,大家参考使用吧 2个php测试文件 server.php     代码如下: <?php //phpinfo(); //确保在连接客户端时不会超时 set_time_limit(0);   $ip = '127.0.0.1'; $port = 1935;   /*  +-------------------------------  *    @socket通信整个过程  +-------------------------------  *

网络编程Socket

 网络模型 OSI参考模型 TCP/IP参考模型 可以上网脑补 学的网络编程主要在应用层(我想android.JavaWeb.QQ.梦幻西游等吧,估计是).传输层和网际层混,每个层都有自己的协议规则. 传输层主要用TCP(同步:面向连接,数据量大).UDP(异步:面向无连接,大小限制在64k内,QQ聊天.网络视频用的UDP) 网际层主要用IP协议 应用层协议:HTTP 网络通讯要素 IP地址:标识网络上的电脑的,相当于给电脑取个唯一的名字   192.168.1.1,最大只能设置255这是字

续实例解析SOCKET编程模型之异步通信篇(上)

编程|异步 .NET 框架的 Socket 类实际上是 Winsock32 API 提供的套接字服务的托管代码版本.其中Socket 类为网络通信提供了一套丰富的方法和属性,大多数情况下,Socket 类方法只是将数据封送到它们的本机Win32 副本中并处理任何必要的安全检查.Socket 类允许使用 ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输.Socket 类遵循异步方法的 .NET Framework 命名模式:例如,同步 Receive 方法对应于异步 Be

续实例解析SOCKET编程模型之异步通信篇(下)

编程|异步 异步客户端套接字在等待网络操作完成时不挂起应用程序.相反,它使用标准 .NET Framework 异步编程模型在一个线程上处理网络连接,而应用程序继续在原始线程上运行.异步套接字适用于大量使用网络或不能等待网络操作完成才能继续的应用程序. Socket 类遵循异步方法的 .NET Framework 命名模式:例如,同步 Receive 方法对应异步 BeginReceive 和 EndReceive 方法. 异步操作要求回调方法返回操作结果.如果应用程序不需要知道结果,则不需要任

socket programming example

1. 头文件 vi server.h  // 头文件 // 注册信号处理函数 int catch_signal(int sig, void (*handler) (int)); // 从socket读数据到char *buf int read_in(int socket, char *buf, int len); // 错误函数, 当exit_val=0只输出错误信息, 不退出程序. 其他值输出错误信息并退出程序 void error(char * msg, int exit_val); //

Java socket编程入门

编程 第一章:学习提示 我适合学习这份教程吗 Socket提供了两台计算机之间进行通讯的机制,在James Gosling注意Java语言之前就已经很闻名了.Java语言使你更简单有效的使用Socket开发而无需了解操作系统的底层机制.大部分讨论Java编码的书籍都没有涉及这一主题,或者是只是"点到为止",留给读者大量的想象空间.这份教程就是让你了解在你的Java代码中如何更有效的使用Socket所需的知识.包含以下内容: •什么是Socket •它位于你的应用程序的哪些地方 •能正常

Java socket编程入门[1]

编程 第一章:学习提示 我适合学习这份教程吗 Socket提供了两台计算机之间进行通讯的机制,在James Gosling注意Java语言之前就已经很闻名了.Java语言使你更简单有效的使用Socket开发而无需了解操作系统的底层机制.大部分讨论Java编码的书籍都没有涉及这一主题,或者是只是"点到为止",留给读者大量的想象空间.这份教程就是让你了解在你的Java代码中如何更有效的使用Socket所需的知识.包含以下内容:•什么是Socket•它位于你的应用程序的哪些地方•能正常运行的

andord socket连接网站,怎么获取网页数据

问题描述 andord socket连接网站,怎么获取网页数据 可以连上baidu.com ,但是到readline(),就卡助了...怎么获取数据阿,或者是显示出百度的主页,求救

很幽默的讲解六种Socket I/O模型

很幽默的讲解六种Socket I/O模型   信息来源:幻影论坛     作 者: flyinwuhan (制怒·三思而后行) 本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教. 一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型五:Overlapped I/O 完成例程模型六:IOCP模型 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系

linux-Linux c socket抓取网页保存到文件一直是乱码

问题描述 Linux c socket抓取网页保存到文件一直是乱码 如题,建立连接后发送请求后,保存到文件的代码如下: while(recvSize=recv(sockfdrecvBufBUF_SIZE0)>0){ fwrite(recvBufsizeof(char)strlen(recvBuf)fp); printf(""%s""recvBuf); memset(recvBuf0sizeof(recvBuf)); } 网页可以在终端上正常显示,但是这样保存到