`
kxmd2008
  • 浏览: 4446 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

socket 学习

    博客分类:
  • java
阅读更多
概念: 
    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

    ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

原理:
    服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

   客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

建立服务
.
public class Server { 
private ServerSocket ss; 
private Socket socket; 
private BufferedReader in; 
private PrintWriter out; 

public Server() { 
try { 
ss = new ServerSocket(10000); 

while (true) { 
socket = ss.accept(); 
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
out = new PrintWriter(socket.getOutputStream(),true); 

String line = in.readLine(); 
out.println("you input is :" + line); 
out.close(); 
in.close(); 
socket.close(); 
} 
ss.close(); 
} 
catch (IOException e) 
{} 
} 

public static void main(String[] args) { 
new Server(); 
} 
} 


这个程序建立了一个服务器,它一直监听10000端口,等待用户连接。在建立连接后给客户端返回一段信息,然后结束会话。这个程序一次只能接受一个客户连接。

建立客户端
public class Client { 
Socket socket; 
BufferedReader in; 
PrintWriter out; 

public Client() { 
try { 
socket = new Socket("xxx.xxx.xxx.xxx", 10000); 
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
out = new PrintWriter(socket.getOutputStream(),true); 
BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); 

out.println(line.readLine()); 
line.close(); 
out.close(); 
in.close(); 
socket.close(); 
} 
catch (IOException e) 
{} 
} 

public static void main(String[] args) { 
new Client(); 
} 
} 

这个客户端连接到地址为xxx.xxx.xxx.xxx的服务器,端口为10000,并从键盘输入一行信息,发送到服务器,然后接受服务器的返回信息,最后结束会话。

多个客户同时连接设计原理:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。运用Thread类或Runnable接口来实现是不错的办法。


//--- CreateServerThread 
class CreateServerThread extends Thread //作为内部类
{ 
private Socket client; 
private BufferedReader in; 
private PrintWriter out; 

public CreateServerThread(Socket s) throws IOException 
{ 
client = s; 

in = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312")); 
out = new PrintWriter(client.getOutputStream(), true); 
out.println("--- Welcome ---"); 
start(); 
} 

public void run() 
{ 
try 
{ 
String line = in.readLine(); 

while (!line.equals("bye")) 
{ 
String msg = createMessage(line); 
out.println(msg); 
line = in.readLine(); 
} 
out.println("--- See you, bye! ---"); 
client.close(); 
} 
catch (IOException e) 
{} 
} 

分享到:
评论

相关推荐

    java socket学习

    Java Socket学习是Java网络编程的重要组成部分,主要用于实现进程间的网络通信。Socket在计算机网络中扮演着数据传输的桥梁角色,它允许两个网络上的程序通过网络进行数据交换。在这个基础学习代码中,我们将深入...

    socket学习资料

    在本“Socket学习资料”中,包含的资源有C语言SOCKET教程的CHM格式文档、两个C++源码文件(client.cpp和server.cpp)以及一本关于C语言之Socket的PDF教程,这些都是深入理解并实践Socket编程的有效资源。 首先,`...

    java socket 学习资料

    以上就是关于Java Socket编程的一些关键知识点,通过学习和实践,你可以掌握如何在Java中实现网络通信,以及如何处理HTTP请求和响应。结合提供的文件资料,可以深入研究具体的实现细节和常见问题的解决方法。

    C#基础socket学习视频-1.zip

    本资源“C#基础socket学习视频-1.zip”是针对初学者设计的一系列教程,旨在帮助他们理解和掌握C#中的Socket编程,特别是与TCP和UDP相关的基础知识。以下是这些视频课程可能涵盖的关键知识点的详细说明: 1. **...

    Android socket 学习记录 client端源码

    本篇将详细解析`Android socket 学习记录 client端源码`中的关键知识点,帮助你深入理解Android客户端Socket编程。 1. **Socket基础**:Socket是网络通信中的一个概念,它代表了两台机器间进行数据交换的一个端点。...

    很好的C#socket学习资料

    总之,"很好的C# socket学习资料"提供了从基础到实践的全面学习体验,涵盖了Socket通信、客户端与服务器编程、并发处理、数据序列化等多个方面,是深入理解和掌握C#网络编程的宝贵资源。通过分析和实践EasyChat项目...

    linux socket学习.pdf

    本篇文章将根据给定文件“linux socket学习.pdf”的内容进行展开,重点讨论 socket 的定义、如何创建 socket 以及 socket 与其他常见 I/O 操作的区别。 #### 二、理解 Socket ##### 2.1 定义 Socket Socket 可以...

    socket学习(包括Tcp,Udp)

    Socket编程是计算机网络通信的核心技术之一,它允许两个或多个应用程序通过网络进行数据交换。在本文中,我们将深入探讨TCP和UDP两种主要的传输层协议,并结合Socket接口在实际编程中的应用。 首先,TCP...

    Java Socket学习---单线程阻塞

    "Java Socket学习---单线程阻塞"这个主题主要探讨了如何使用Java的Socket类进行单线程的阻塞式通信,这种模式通常用于简单的客户端-服务器应用。在这个场景中,服务器端通过一个线程处理一个客户端的请求,当请求被...

    socket 学习的例子

    本文将深入探讨"socket学习的例子",并以提供的"NetTest"项目为例,阐述如何在C#中实现socket监听和数据发送。 首先,我们需要了解Socket的基本概念。Socket是网络通信中的一个端点,它允许两个或多个应用程序通过...

    Socket学习

    ### Socket学习:深入理解网络通信基础 在计算机网络中,Socket是一种用于进程间通信的机制,允许不同机器上的应用程序通过网络进行数据交换。Socket的概念基于客户端/服务器模型,其中客户端发起连接请求,而...

    java socket学习工具_网页形式.rar

    这个"java socket学习工具_网页形式.rar"压缩包可能包含了帮助学习Java Socket编程的网页教程、示例代码或实用工具,旨在帮助开发者理解如何通过Socket进行数据传输。 在Java中,Socket是基于TCP/IP协议的,它提供...

    socket学习

    讲述网络中进程之间如何通信,TCP三次握手与四次握手的简单介绍

    C#基础socket学习视频-3end.zip

    本课程“C#基础socket学习视频”专注于教授如何使用C#进行Socket编程,通过观看视频,你可以深入理解并掌握这一核心技术。 Socket,又称为套接字,是网络通信中的基本概念,它为应用程序提供了一种在网络间交换数据...

    socket学习报告.md

    socket学习报告

    C# Socket学习实例

    通过学习以上内容,你可以开始构建自己的C# Socket应用程序,无论是简单的聊天应用还是复杂的网络服务。实践是掌握知识的最佳方式,所以尝试编写一个简单的Socket服务器和客户端,以此加深理解。

    socket 学习笔记

    以下是对Socket学习笔记的详细解释: 1. **Socket构造方法**: - `Socket()`:创建一个未连接的Socket对象。 - `Socket(InetAddress address, int port)`:创建一个Socket并连接到指定的IP地址和端口。 - `...

    socket学习 最全的例程源码

    socket学习最全的例程源码,对初学者很有用,内容包括ping,tcp server,tcp client,udp server,udp client,smtp client,web server,telnet,sniffer,五种I/O模型源码..... 囊括了socket所有的内容。

Global site tag (gtag.js) - Google Analytics