`
快乐的拖拉机
  • 浏览: 9572 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

通信的简单实现

阅读更多
拖了好久了,突然间觉得这迟到的总结不应该总结关于什么技术的事情了!技术博客是一个阶段的学习成果的总结,但是我觉得这篇博客首先应该总结一下自己的思想了!
在每个学期的开始每个人都会有一段时间的学习热情期,那段时间里脑子里幻想着好多东西,幻想着这样下去自己的收获该是多么的多,幻想着成为大神的种种!但是大神之路不是每个人想的那样简单,只有坚持不懈的坚持下去,才是唯一的真理!突然间发现自己又是如此的懒惰了,就是一篇很简单的技术博客也拖拉了这么久!是因为不会么?对,好像就是这个原因。但是不会为什么不去写技术博客呢?因为不会!每次我们都在给自己找一些可有苦无的借口,“不会”应该是一个特别经典的了!面对经典我们总是显得那么的脆弱,没有想着如何去突破这个叫经典的东西。最后的结果也就是不会了,到最终也是不会了!
   突然觉得坚持是一种最可贵品质了!学会了去坚持,也就学会未来的了人生!
   前些天学了关于通信的相关内容,实现了从自己在自己的电脑上相连接进行对话到与他人的电脑相连接,再到多个会话窗口的同时连接对话!
首先来了解一下qq聊天的的基本思想:
   在指定的端口上创建一个服务器对象-让服务器进入待机状态,等待客户机的连接从连接成功的客户机上得到输入输出流读取客户机发来的数据,向客户机发数据;这样,一个简单的聊天功能就实现了
首先了解一下ServerSocket和Socket类的相关方法:
ServerSocket中常用的构造函数及方法:
构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象
方法:
Socket accept() 产生阻塞,监听指定的端口,直至有客户端发来连接请求
void close() 关闭当前ServerSocket
InetAddress getInetAddress() 返回ServerSocket监听的,本机的IP地址
int getLocalPort() 返回ServerSocket监听的,本机的IP地址上指定的端口号
int getSoTimeout();void setSoTimeout(int timeout) 设置连接过程中没有得到相应的等待期限时间(TimeOut)
String toString()   以字符串的方式返回ServerSocket监听的,本机的IP地址及其端口号
Socket类中常用的构造函数和方法:
构造函数:Socket(InetAddress address,int port) 用于创建一个链接,向指定的IP地址上指定的端口的服务器端程序发送连接请求
Socket(String host,int port)   同上,但该方法允许通过主机名字符串向服务器发送连接请求
方法:
void close()关闭当前的Socket 连接
InetAddress getInetAddress() 返回Socket建立了连接的服务器的IP地址
InputStream getInputStream() 返回当前Socket的输入流
OutputStream getOutStream() 返回当前Socket的输出流
InetAddress getLocalAddress() 返回和Socket进行连接的本地的IP地址
int getLocalPort() 返回和Socket进行连接的本地的端口号
int getPort() 返回和Socket建立了连接的服务器的端口号
int getSoTimeOut();void setSoTimeOut(int timeout) 设置连接过程中没有得到相应的等待期限时间
String toString () 以字符串的方式返回Socket的属性信息
如果要实现多个会话窗口就应该是多线程的问题,只需要让服务器继承线程类,当在待机状态下每有一个客户机来连接的时候就产生一个线程去处理对应的客户机对象!
代码如下:
//public void setUpSever(int port) throws IOException{
// ServerSocket serve =new ServerSocket(port);
//System.out.println("服务器创建成功"+port);
//try {
// while(true){//服务器进入循环等待状态
// Socket client=serve.accept();
// ServeThread st=new ServeThread(client);
// st.start();
// System.out.println("线程已经启动");
// }
// {
// //创建服务器
// java.net.ServerSocket serve=new ServerSocket(port);
// System.out.println("服务器创建成功!"+port);
// Socket client=serve.accept();
// //de得到消息
// String s=client.getRemoteSocketAddress().toString();
// //从连接对象上得到输入输出流
// InputStream in=client.getInputStream();
//     OutputStream ou=client.getOutputStream();
//     String s1="欢迎聊天!";
//     //将字符串转化为字节数组
//     byte[] data=s1.getBytes();
//     ou.write(data);
//    String s2=new String (data);
//    System.out.println("输入得字符串是:"+s2);
//     ou.flush();//强制输出
//
//     int du=0;
//
//     while(du!=13)
//     {
//     du=in.read();
//     System.out.println("当前读到的是:"+du);
//     }
//     System.out.println("你现在输入的是回车键,结束:"+du);
//     String s4=ReadingString(in);
//     System.out.println("缓存输出字符串:"+s4);
//     client.close();
// }
// }catch(Exception ef){
// ef.printStackTrace();
// }

ServeThread 类代码:
package Tongxin;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServeThread extends Thread {
private OutputStream ou;
private Socket client;
public  ServeThread(Socket s)
{
this.client=s;
}
public void run()
{
try {
processChat(this.client);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void Sendmassenge(String m) throws IOException{
byte[] data =m.getBytes();
ou.write(data);//用输出对象发送
ou.flush();//强制输出
}
private void processChat(Socket client) throws IOException
{
ou=client.getOutputStream();//得到输出流,输入流
InputStream in=client.getInputStream();
String s="欢迎来聊天@!";
this.Sendmassenge(s);
String inputs=readString(in);//读取客户机的信息
while(!inputs.equals("end")){
System.out.println("对方发来消息:"+inputs);
s="回复:我认识你的哦\r\n";
this.Sendmassenge(s);
inputs=readString(in);
}
s="再见!";
this.Sendmassenge(s);
client.close();
}
private String readString(InputStream in) throws IOException {
StringBuffer sbf=new StringBuffer();//创建一个缓冲区域
char c=0;
while(c!=13){//遇到换行符就是发送信息
int i=in.read();//读取客户机发来的每一个字节,返回整数值
c=(char)i;//将返回的数字在转化为对应的字节
sbf.append(c);//将得到的字节存到缓冲区域!
}
String inputs=sbf.toString().trim();
return inputs;
}
}

  组后附上一个网址:http://hi.baidu.com/xiuyuanvip/item/fbe37c06e491b6ef359902e1
分享到:
评论

相关推荐

    Android中socket通信简单实现

    Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...

    MFC UDP通信简单实现

    在开始深入探讨MFC中UDP通信的实现之前,我们首先要理解TCP与UDP在网络通信中的区别。TCP协议是一种面向连接的、可靠的传输层协议,它提供了错误检测和确认机制,确保数据包能够准确、有序地到达目的地。因此,TCP在...

    socket通信简单实现

    本示例中,我们探讨的是如何通过Java实现一个简单的Socket通信服务,包括客户端和服务端。 首先,让我们理解什么是Socket。Socket是网络通信中的一个抽象概念,可以看作是两台计算机之间建立连接的端点,也称为套接...

    LabVIEW远程通信简单实现

    LabVIEW通信,原理是一个服务端,一个发送端,一个读取端,需要配置datasocker manager 里面的数据接口,源代码需要稍做修改,要根据每个人计算机的IP地址来.

    MFC实现简单的串口通信

    在MFC(Microsoft Foundation Classes)框架下实现串口通信,可以方便地创建与硬件设备交互的应用程序。MFC提供了一套类库,使得开发者能够更加简单、高效地处理串口通信的细节。 首先,我们要了解串口通信的基本...

    三菱FX5U与西门子S7-1200通过简单CPU通信设置实现以太网通信功能的具体方法步骤.docx

    ### 三菱FX5U与西门子S7-1200通过简单CPU通信设置实现以太网通信功能的具体方法步骤 #### 一、概述 本文档旨在详细介绍三菱FX5U PLC与西门子S7-1200 PLC之间通过简单CPU通信设置实现以太网通信的具体步骤。通过这些...

    S7-1200与三菱FX5U系列PLC通过简单CPU通信功能实现以太网通信的具体方法.docx

    标题所述的文档主要介绍了如何使西门子S7-1200 PLC与三菱FX5U系列PLC之间通过简单的CPU通信功能实现以太网通信。以下是对这一具体方法的详细说明: 首先,确保西门子S7-1200 PLC的配置正确。在西门子TIA Portal软件...

    三菱FX5U系列PLC通过简单CPU通信功能实现以太网通信的具体方法示例.docx

    本示例主要讲解如何利用其内置的简单CPU通信功能实现以太网通信,以便于不同设备间的数据交互。 首先,简单CPU通信功能允许FX5U系列PLC与其他设备进行快速且直接的数据交换,无需复杂的网络配置。这种通信方式适用...

    基于socket简单通信协议实现

    本主题将深入探讨如何实现基于Socket的简单通信协议,主要包括以下几个方面: 一、Socket基本概念 Socket,通常称为套接字,是网络编程中的一个抽象概念,用于在网络上的两个进程间建立通信连接。在TCP/IP协议栈中...

    利用socket实现客户端服务器之间简单通信

    本教程将深入探讨如何利用Socket库在Python中实现客户端与服务器之间的简单通信,这涉及到TCP/IP协议中的三次握手和四次挥手过程。 首先,我们来看TCP(传输控制协议)的三次握手。三次握手是为了确保连接的可靠性...

    python实现简单的加密通信

    本文将深入探讨如何利用Python和PyCrypto实现简单的加密通信。 首先,PyCrypto是一个包含了大量加密算法的Python库,包括对称加密(如AES、DES)、非对称加密(RSA、DSA)、哈希函数(MD5、SHA)等。在我们的案例中...

    基于TCP协议的简单即时通信软件的设计与实现

    "基于TCP协议的简单即时通信软件的设计与实现" 本文主要介绍了基于TCP协议的简单即时通信软件的设计与实现,旨在设计一个能够处理多用户进行实时、安全的即时通信系统。本系统采用C/S模式,服务器负责客户端的登录...

    接口通信课程设计——双机串口通信 汇编实现

    字符通信相对简单,直接发送ASCII码即可;而文件通信则涉及到文件读取、缓冲区管理和数据分包等多个步骤。 在实现文件传输时,我们通常会先将文件读入内存,然后将其拆分成若干数据包,每个数据包包含一定量的数据...

    OC简易通信录实现

    在这个项目中,"OC简易通信录实现"涉及了多个关键知识点,包括数据模型设计、用户界面构建、数据存储和检索、以及基本的事件处理。下面将对这些知识点进行详细解释。 首先,我们需要建立数据模型来表示联系人。在OC...

    计算机网络串口通信,VC++实现串口通信,VB实现串口通信

    它通过一条或几条数据线,依次传输每一位数据,速度相对较慢,但硬件简单、成本低,适合远距离通信。串口通信的核心参数包括波特率、数据位、停止位和校验位,这些参数需在通信双方设置一致才能正常通信。 VC++...

    java实现简单socket通信

    Java实现的简单Socket通信是网络编程中的基础技术,主要用于设备间的双向数据传输。在这个场景中,我们有两个窗口,一个作为服务器端,另一个作为客户端,它们通过TCP协议进行通信。TCP是一种面向连接的、可靠的传输...

    基于蓝牙模块的单片机双机通信的实现.pdf

    在本设计中,作者通过将单片机与蓝牙模块相连接,实现了一个简易的无线通信系统。文中提到,通信过程中单片机与蓝牙模块之间的通信是通过串行方式进行的,且为保证数据准确传输,设计中使用了八个指示灯来显示通信...

    modbus通信的Python实现

    `pyModbusTCP`是Python的一个开源库,它提供了一个简单易用的接口来实现Modbus TCP通信。这个库允许我们创建Modbus服务器(即服务端)和客户端,从而实现设备间的通信。 1. **创建Modbus客户端** 使用`pyModbusTCP...

    汇编实现双机通信,查询和中断方式,成功通信。

    双机通信通常涉及到串行通信,因为其硬件简单,只需一对线路即可实现数据传输。串行通信分为异步和同步两种方式,其中ASCII字符方式通常属于异步通信,它在数据传输前会加上起始位和停止位,以确保数据的正确接收。...

Global site tag (gtag.js) - Google Analytics