`
accpxudajian
  • 浏览: 459982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于TCP的Socket编程

    博客分类:
  • Java
阅读更多

>>Socket相关的理解:
1>TCP:拨电话后和对方谈话 对应特点:有连接,安全(对方一定收到了且自己说什么对方听到的就是什么)。
     UDP:写信给对方 对应特点:无连接,但对方不一定收到,收到了数据也不一定完整。
     DNS:域名服务(每个域名对一个一个IP)。
2>比喻和对比
        Socket:电话机         IP:电话号码  端口:分机号。
3>返回本地IP地址的三种方式:
    InetAddress.getByName("localhost")   ; InetAddress.getByName("127.0.0.1") (属于回路地址)  ; InetAddress.getByName(null)   ;
4>服务器端和客户端的功能
    服务器端:开辟端口 提供服务;
   客户端:指定服务器端和端口,获取服务。

>>一个简单的客户端/服务器端(Client/Server)的数据读写
Server服务器端代码:
import java.net.*;
import java.io.*;
class ServerrSocket
{
public static void main(String[] args)
{
  server();
}
public static void server()
{
  try{
   ServerSocket ss = new ServerSocket(6000);//指定6000端口提供服务;
   System.out.println("服务器端启动...");
   Socket s = ss.accept();    //采取侦听的方法,随时接受客户端Client的请求
   OutputStream os = s.getOutputStream(); //根据客户端Client创建输出流对象
   InputStream is = s.getInputStream(); //根据客户端Client创建输入流对象
   os.write("hello ,welcome you!".getBytes()); //向客户端Client写入数据
   byte[] buf = new byte[100]; //声明一个byte数组,用于接收客户端Client的输入数据
   int len = is.read(buf); //读取客户端的输入Client数据并保存到byte数组中,返回数组大小
   System.out.println(new String(buf,0,len)); //服务器端Server输出客户端的输入
   os.close();//关闭输出流
   is.close(); //关闭输入流
   s.close(); //关闭Socket对象
   ss.close(); //关闭服务器Socket对象
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
}
}

客户端Client代码:
import java.net.*;
import java.io.*;
class ClientSocket
{
public static void main(String[] args)
{
  client();
}
public static void client()
{
  try{
   Socket s = new Socket(InetAddress.getByName("127.0.0.1"),6000); //创建指定IP的端口号为6000的服务请求
   OutputStream os = s.getOutputStream();  //根据服务器端Server创建输出流对象
   InputStream is = s.getInputStream(); //根据服务器端Server创建输入流对象
   os.write("hello ,i am dajian!".getBytes()); //向服务器度Server写入字节码数据
   byte[] buf = new byte[100]; //声明byte数组,用于接收服务器端的数据
   int len = is.read(buf);  //读入服务器度Server写入的数据到byte数组,返回数组大小
   System.out.println(new String(buf,0,len)); //客户端输出数据
   os.close(); //关闭输出流
   is.close(); //关闭输入流
   s.close();//关闭Socekt对象

  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
}
}

3>>与Thread结合,实现持续不间断的侦听客户端的请求
import java.net.*;
import java.io.*;
//服务器端继承Thread,变成线程类
class ServerrSocket  extends Thread

{
private Socket s; //套接字属性
//带参构造函数指定哪个为套接字提供服务
ServerrSocket(Socket s)
{
  this.s = s;
}

//重写run方法
public void run()
{  
  try{
   OutputStream os = s.getOutputStream();//输出流
   InputStream is = s.getInputStream(); //输入流
   os.write("hello ,welcome you!".getBytes());
   byte[] buf = new byte[100];
   int len = is.read(buf);
   System.out.println(new String(buf,0,len));
   os.close();
   is.close();
   s.close();
  }catch(Exception e)
  {
   e.printStackTrace();
  }
}
public static void main(String[] args)
{
  server();
}
public static void server()
{
  try{
   ServerSocket ss = new ServerSocket(6000);
   System.out.println("服务器端启动...");
   //while死循环实现始终等待客户端请求,接受请求开启线程,提供服务
   while(true)
   {
    Socket s = ss.accept();
    new ServerrSocket(s).start();//紧接着走run方法,run方法结束,线程结束
   }
   //ss.close(); //持续侦听,所以不对服务器Socekt对象进行关闭
  
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
}
}

4>>缓冲流读写大量数据的处理和注意事项
import java.net.*;
import java.io.*;
//服务器端继承Thread,变成线程类
class ServerrSocket  extends Thread
{
private Socket s; //套接字属性
//带参构造函数指定哪个为套接字提供服务
ServerrSocket(Socket s)
{
  this.s = s;
}

//重写run方法
public void run()
{  
  try{

   /* //原始的输入流输出流方法
   OutputStream os = s.getOutputStream();//输出流
   InputStream is = s.getInputStream(); //输入流
   os.write("hello ,welcome you!".getBytes());
   byte[] buf = new byte[100];
   int len = is.read(buf);
   System.out.println(new String(buf,0,len));
   os.close();
   is.close();
   s.close();
   */

   /* 使用缓冲流读写数据 关键调用flush方法清空缓冲 或者最后将缓冲流对象关闭调用close方法
   //演示调用flush方法清空缓冲
   OutputStream os = s.getOutputStream();//输出流
   InputStream is = s.getInputStream(); //输入流
   BufferedOutputStream bos = new BufferedOutputStream(os);
   bos.write("hello ,welcome you!".getBytes());
   bos.flush();//必须清空缓冲,通过网络将数据送出去
   byte[] buf = new byte[100];
   int len = is.read(buf);
   System.out.println(new String(buf,0,len));
   */
   //演示调用close方法关闭缓冲
   OutputStream os = s.getOutputStream();//输出流
   InputStream is = s.getInputStream(); //输入流
   BufferedOutputStream bos = new BufferedOutputStream(os);
   bos.write("hello ,welcome you!".getBytes());
   byte[] buf = new byte[100];
   int len = is.read(buf);
   System.out.println(new String(buf,0,len));
   bos.close();
   //os.close();
   is.close();
   s.close();
  }catch(Exception e)
  {
   e.printStackTrace();
  }
}
public static void main(String[] args)
{
  server();
}
public static void server()
{
  try{
   ServerSocket ss = new ServerSocket(6000);
   System.out.println("服务器端启动...");
   //while死循环实现始终等待客户端请求,接受请求开启线程,提供服务
   while(true)
   {
    Socket s = ss.accept();
    new ServerrSocket(s).start();//紧接着走run方法,run方法结束,线程结束
   }
   //ss.close(); //持续侦听,所以不对服务器Socekt对象进行关闭

  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
}
}

分享到:
评论

相关推荐

    VC学习笔记-基于TCP的socket编程

    ### 基于TCP的Socket编程在VC中的应用与实现 #### 一、知识点概览 在VC(Visual C++)环境下进行网络编程时,基于TCP的socket编程是实现客户端与服务器之间通信的重要方式之一。本文将从初始化、创建socket、绑定...

    基于TCP/IP的socket编程

    "基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...

    基于tcp的socket编程

    本篇文章将深入探讨基于TCP的Socket编程,包括基本概念、服务器端和客户端的实现,以及常见问题。 首先,TCP套接字(Socket)是应用层与TCP层之间的接口,它允许程序通过TCP协议发送和接收数据。TCP保证了数据的...

    基于TCP的Socket编程服务器和客户端代码

    本主题聚焦于使用Java进行基于TCP的Socket编程,通过`File_client.java`和`File_server.java`两个文件来实现服务器和客户端之间的数据交换。 首先,TCP Socket编程的基础是Java的`java.net.Socket`和`java.net....

    Linux环境下基于TCP的Socket编程浅析

    ### Linux环境下基于TCP的Socket编程浅析 #### 摘要 本文主要探讨了Linux环境下基于TCP协议的Socket编程技术。Socket作为一种通用的进程间通信(IPC)方式,不仅适用于同一台计算机上的进程通信,也广泛应用于网络...

    基于TCP的Socket编程.pdf

    基于TCP的Socket编程是计算机网络通信中的一项核心技术,它允许两个网络应用程序之间进行数据交换。Socket是一种特殊的网络编程接口,而TCP(传输控制协议)是一种可靠的面向连接的协议。在这份“基于TCP的Socket...

    基于TCP的SOCKET编程代码包

    本压缩包文件“基于TCP的SOCKET编程代码包”提供了多个关于TCP SOCKET编程的实例,适用于学习和开发网络通信应用。 首先,我们要理解SOCKET,它是网络编程中的基本接口,允许应用程序通过网络发送和接收数据。在...

    基于TCP的socket编程(python).rar

    在这个"基于TCP的socket编程(python)"的项目中,我们看到的是一个针对计算机网络课程设计的作业,其中增加了登录验证和通过输入"exit"退出的特性。这个作业主要涉及到Python语言中的Socket模块,用于实现TCP...

    基于TCP面向连接的 Socket网络编程实验

    2. Socket编程:Socket是一种网络编程接口,提供了基于TCP/IP协议的网络通信功能。 3. TCP三次握手:TCP三次握手是TCP协议中的一种连接建立机制,通过三次握手,客户端和服务器端可以建立可靠的连接。 4. Etheral抓...

    基于TCP/IP协议的Socket编程

    基于TCP/IP协议的Socket编程 TCP/IP协议是网络通信协议的基础,它规定了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式。TCP/IP协议的基本传输单位是数据包(datagram),TCP...

    Java TCP IP Socket编程(原书第2版).

    《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...

    TCP socket编程

    本教程旨在帮助初学者理解TCP Socket编程的基本概念,并通过简单的实例演示如何实现客户端与服务器端的交互。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保...

    基于Socket的UDP和TCP编程介绍

    本文详细介绍了基于Socket的UDP和TCP的编程原理和方法,适合于那些对UDP/TCP的socket编程不太清楚的同学

    基于tcp的socket编程实例

    在这个"基于TCP的socket编程实例"中,我们将深入探讨如何使用socket API进行TCP通信,并通过"main"这个程序文件来理解其实现过程。 首先,TCP socket编程主要包括服务器端和客户端两部分。服务器端需要先启动,监听...

    C# TCP Socket 编程

    在C#中,我们可以使用System.Net.Sockets命名空间下的TcpListener和TcpClient类来实现TCP Socket编程。下面将详细介绍这两个类以及如何使用它们创建服务端和客户端。 **一、服务端实现** 1. **TcpListener类**:...

    TCPSocket编程.zip

    TCPSocket编程是网络编程中的一个关键领域,它涉及到如何在不同计算机之间建立可靠的、基于TCP/IP协议的数据传输。在本文中,我们将深入探讨Socket的基本概念、在Windows和Linux环境下的实现、常用的Socket函数以及...

    socket编程 TCP文件的传输实现 客户端和服务端

    总的来说,TCP Socket编程涉及到网络通信的基础知识,包括套接字的创建、连接建立、数据传输以及异常处理。这个资源为初学者提供了一个简单的起点,帮助理解TCP文件传输的机制。在实际项目中,还需要考虑更多的因素...

Global site tag (gtag.js) - Google Analytics