`
王浩洋
  • 浏览: 17369 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Socket通信

阅读更多

1.通信原理

服务器端 1.先建立一个ServerSocket,等待客户端连接

                2.当有客户端连接时,建立连接,为连接多个客户端,我们创建一个线程处理客户端发来的请求

                3.完成通信后,服务器关闭此连接

    //根据端口号实例化ServerSocket类的一个对象
    ServerSocket server = new ServerSocket(8888);
	while(flag){
	// 等待客户机连接进入,进入后实例化一个客户机Socket对象		
		Socket client = server.accept();
		System.out.println("客户机连接成功,客户机的地址是:"
					+ client.getRemoteSocketAddress());
		//当有客户机接入时创建线程
		Clientuser user=new Clientuser(client,jta);
		user.start();

 客户端:1.根据服务器ip地址和端口号创建Socket

                2.连接成功后创建线程处理连接

                3.通信完成后断开连接

try {
	client =new Socket("192.168.1.158",9999);
	os=client.getOutputStream();
	is=client.getInputStream();
	Clienter clienter=new Clienter(client);
	clienter.start();
		} 
		 catch (Exception e) {
			e.printStackTrace();
		}

  2.通信协议

通信协议说白了就是你指定的发送数据和接受数据的规则。

例如发消息时,你可以指定先发送int说明消息的总长度,再发送一个字节长度的数据来表示你发送的是消息不是其他的,再发送int说明接受者的id,最后发送消息体;接收的时候你也按照这个规则依次读取信息。

发文件时,你可以先发送一个int表示文件名,然后再把文件循环读取到固定长度的缓冲区发给服务器,直到读取到文件末尾,这样无论多大的文件都可以发送,发送时间长短就要看你的网速了,昨天在蓝杰测试发个100多k的图片发了好久

(1)一个登陆请求代码示例:

public String login(String msg){ 
		String user_name = this.username.getText().toString();
		String  pass_word = this.password.getText().toString();
		try {
			byte []data1 = user_name.getBytes();
			byte []data2 = pass_word.getBytes();
			int total_len = 4+1+4+data1.length+data2.length;
			int name_len = data1.length;
			dataout.writeInt(total_len);
			dataout.writeByte(1);
			dataout.writeInt(name_len);
			dataout.write(data1);
			dataout.write(data2);
			dataout.flush();
			msg = bufferin.readLine();
			System.out.println(msg+"hhhhhhhh");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return msg;
	}

 (2)登录验证代码示例:

public void process_login(int total_len) throws SQLException {
		try {
			int name_len = dis.readInt();
			byte[] data1 = new byte[name_len];
			byte[] data2 = new byte[total_len - 9 - name_len];
			dis.read(data1);
			dis.readFully(data2);
			String username = new String(data1);
			String password = new String(data2);
			System.out.println(username + " ");
			System.out.println(password);
			// 获取验证结果信息
			String msg  = query(username, password);
			if (msg.equals("验证已通过")) {
				sendMsg("验证已通过");
				System.out.println("验证已通过");
			}
			if (msg.equals("密码输入错误")) {
				sendMsg("密码输入错误");
				System.out.println("密码输入错误");
			}
			if (msg.equals("用户不存在")) {
				sendMsg("用户不存在");
				System.out.println("用户不存在");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 (3)关于文件的传输我写了个测试程序,详情见附件,欢迎下载

         由于程序中我指定默认保存在D盘Download下所以你要有这个文件夹

6
1
分享到:
评论
9 楼 lvwenwen 2014-07-18  
感谢你的知识和分享
8 楼 王浩洋 2014-07-17  
xiaowanghappy 写道
王浩洋 写道
xiaowanghappy 写道
怎么都是乱码啊 也不是gbk的 也不是utf-8

哪里乱码了,传消息的话我用的是DataOutputStream和DataInputStream啊

放到eclipse里是乱码 不管我设置成utf-8还是gbk

你是说传消息吗
xiaowanghappy 写道
王浩洋 写道
xiaowanghappy 写道
怎么都是乱码啊 也不是gbk的 也不是utf-8

哪里乱码了,传消息的话我用的是DataOutputStream和DataInputStream啊

放到eclipse里是乱码 不管我设置成utf-8还是gbk

你是说传消息吗,这只是个示例Demo,只是说明一下传消息的协议规则,乱码的话是你没算好字节吧,怎么发要怎么收
7 楼 xiaowanghappy 2014-07-17  
王浩洋 写道
xiaowanghappy 写道
怎么都是乱码啊 也不是gbk的 也不是utf-8

哪里乱码了,传消息的话我用的是DataOutputStream和DataInputStream啊

放到eclipse里是乱码 不管我设置成utf-8还是gbk
6 楼 王浩洋 2014-07-16  
xiaowanghappy 写道
怎么都是乱码啊 也不是gbk的 也不是utf-8

哪里乱码了,传消息的话我用的是DataOutputStream和DataInputStream啊
5 楼 王浩洋 2014-07-16  
冬天秋天 写道
同学,你的IDE 工具用的是啥呀,下载附加放到工程里边,中文是乱码。

我用的是eclipse啊,里面的package名字要改下
4 楼 冬天秋天 2014-07-16  
同学,你的IDE 工具用的是啥呀,下载附加放到工程里边,中文是乱码。
3 楼 xiaowanghappy 2014-07-16  
怎么都是乱码啊 也不是gbk的 也不是utf-8
2 楼 xiaowanghappy 2014-07-16  
感谢 对socket通信还是很感兴趣的。
1 楼 comsci 2014-07-16  
非常感谢你的知识和分享.......

相关推荐

    C#Socket通信稳定完整版类库实例

    Socket通信在IT行业中是网络编程的基础,特别是在C#这样的多平台开发环境中,Socket通信库的使用至关重要。本实例,"C# Socket通信稳定完整版类库实例",为我们提供了一个全面且稳定的解决方案,用于实现客户端与...

    windows下socket通信代码

    在Windows环境下进行网络编程时,Socket通信是一种常用的技术。Socket接口是操作系统提供的网络通信API,允许应用程序通过TCP/IP协议栈与其他计算机进行数据交换。本文将详细介绍Windows下的Socket通信代码,包括...

    c++ socket通信库

    **C++ Socket通信库** C++ Socket通信库是用于实现网络通信的一种工具,它基于操作系统提供的Socket接口,为开发者提供了一种在C++程序中进行网络数据交换的标准方法。Socket库简化了网络编程,允许程序员通过调用...

    Android中socket通信简单实现

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

    Mina+Socket通信

    Socket通信的基本步骤包括:创建ServerSocket,等待客户端连接,创建Socket对象,通过输入/输出流进行数据交换,最后关闭连接。 在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口...

    matlab环境下socket通信

    在MATLAB环境中实现Socket通信是将强大的MATLAB计算能力与网络通信功能相结合的重要技术。Socket是一种网络编程接口,它允许程序之间通过网络进行双向通信。MATLAB提供了丰富的工具和函数来支持Socket通信,使得用户...

    C#与Android Socket通信

    Socket通信是一种基于TCP/IP协议族的网络通信方式,它允许两个网络应用程序通过网络进行数据交换。在本场景中,我们关注的是C#作为服务器端,Android作为客户端的Socket通信实现。这种通信方式常用于移动应用与后台...

    socket通信,客户端向服务器传文件

    在IT领域,Socket通信是一种基于TCP/IP协议族的网络编程接口,用于实现不同网络设备间的双向通信。在Java中,我们可以使用Java的Socket类和ServerSocket类来构建客户端和服务器端的通信。在这个场景中,我们将讨论...

    android+pc socket通信

    "Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...

    Android socket通信聊天,客户端+服务端

    在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现聊天应用时。本文将深入探讨如何在Android中实现基于Socket的客户端和服务端通信,以构建一个简单的聊天应用。 首先,让我们理解...

    android中java和C的socket通信demo

    本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 1. **Java Socket基础** Java中的`java.net.Socket`类提供了网络通信的能力,它允许我们在两个应用程序之间建立...

    socket通信代码 点到点通信

    Socket通信是一种基于网络协议(如TCP/IP)进行进程间通信的技术,它允许两台计算机通过互联网交换数据。在本文中,我们将深入探讨“点到点通信”中的Socket通信代码,包括服务端和客户端的实现。 首先,让我们了解...

    Socket通信经典源码HPSocketCS

    Socket通信在IT行业中扮演着至关重要的角色,它是网络应用程序间通信的基础。HPSocketCS是一个专为.NET平台设计的高效、稳定的Socket通信框架,适用于开发跨平台的客户端和服务器端应用。本文将深入探讨HPSocketCS的...

    java与c++通过socket通信

    Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...

    socket通信异常解决总结

    Socket 通信异常解决总结 Socket 通信异常是指在网络通信过程中出现的各种错误和异常,包括网络连接断开、服务器端或客户端程序异常、网络链路异常等。这些异常会导致 Socket 连接断开,影响系统的稳定性和可靠性。...

    C# AES加密Socket通信

    本篇文章将详细探讨C#中如何使用AES加密进行Socket通信,以及涉及的TCP/IP协议。 首先,让我们了解Socket通信的基础。Socket是操作系统提供的网络编程接口,它允许应用程序通过TCP/IP协议发送和接收数据。在C#中,`...

    基于Qt实现局域网Socket通信系统源码.zip

    基于Qt实现局域网Socket通信系统源码。分别有服务端(Server)和客户端(Client) 服务端默认监听本机IP的6666端口 本人实测在linux(需防火墙开启端口)和windows下完美运行。基于Qt实现局域网Socket通信系统源码。...

    linux C语言 socket通信聊天小程序

    本项目涉及的"Linux C语言 socket通信聊天小程序"是一个基础的网络聊天应用,支持群聊和私聊功能。 首先,我们需要理解什么是Socket。Socket是网络编程的一个接口,它提供了进程间通信(IPC)的能力,特别是在网络...

    socket通信文件传输

    Socket通信是一种基于TCP/IP协议族实现的网络通信方式,它允许两台计算机通过网络进行双向通信。在文件传输中,Socket通信提供了一种灵活、高效的方法,尤其适用于大数据量或者跨平台的文件交换。以下是对Socket通信...

    Android基于局域网socket通信

    在Android平台上,实现基于局域网的Socket通信是一项常见的任务,尤其在开发涉及设备间通信的应用时。Socket通信允许两台设备通过网络连接直接交换数据,而无需中间服务器。在这个项目中,我们关注的是Android设备...

Global site tag (gtag.js) - Google Analytics