Socket详解之一




第一次写这种文章,内心难免会有些小紧张,如若有哪里写的不好地方,请大佬们多多担待。

首先先介绍一下Socket的含义与应用,Socket中文名"套接字",英文名为“孔”或“插座”,它是网络上两个程序进行通信的管理者,应用者。简单的来说,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket对象,而我们建立网络通信连接至少要一对端口号(socket)。在internet网上,我们一台主机可以同时运行多种不同的服务软件提供不同的服务,每一个服务都会创建一个socket,并绑定到一个端口上,每个端口提供不同的服务,正如其名一样像一个多孔插座,主机像是一个布满各种插座的房间,每一个插孔对应着一种不同的服务,客户软件将插头插进不同的插孔,得到的服务也不一样。

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

步骤一:   建立连接 

1.服务器开启端口号8888(端口号随便),时刻在监听着,并等待客户端的连接请求。

2.客户端知道服务器的ip与监听端口号,请求连接到服务器。

一旦建立了连接,服务端会得到一个新的Socket对象,该对象负责与客户端进行通信。


如果在开发调试的过程中,如果修改过了服务器Server代码,要关闭启动的Server,否则新的Server不能启动,因为8888端口被占用了 。

Server.java代码如下:

package socket;
 
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
 
    public static void main(String[] args)  {
        try {
   //服务端打开端口8888
   ServerSocket ss = new ServerSocket(8888);
    
   //在8888端口上监听,看是否有连接请求过来
   System.out.println("监听在端口号:8888");
   Socket s =  ss.accept();
    
   System.out.println("有连接过来" + s);
   
   s.close();
   ss.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
         
    }
}



Client.java代码如下:

package socket;
 
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Client {
 
    public static void main(String[] args)  {
         
        try {
   //连接到本机的8888端口
   Socket s = new Socket("127.0.0.1",8888);
   System.out.println(s);
   s.close();
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    }
}

步骤二: 收发数字

一旦建立了连接,服务端与客户端就可以通过Socket进行通信了

1. 客户端打开输出流,并发送数字 520
2. 服务端打开输入流,接受数字 520,并打印

ServerDemo.java代码如下:

package socket;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo{
 public static void main(String[] args) {
  try {
   ServerSocket ss = new ServerSocket(8888);
   System.out.println("监听在端口号:8888");
   Socket s = ss.accept();

   //打开输入流
   InputStream is = s.getInputStream();

   //读取客户端发送的数据
   int msg = is.read();
   //打印出来
   System.out.println(msg);
   is.close();
   s.close();
   ss.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
}

ClientDemo.java代码如下:

package socket;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientDemo {

 public static void main(String[] args) {

  try {
   Socket s = new Socket("127.0.0.1", 8888);

   // 打开输出流
   OutputStream os = s.getOutputStream();

   // 发送数字110到服务端
   os.write(110);
   os.close();

   s.close();
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

运行截图如下:

今天的就到这了,后面还会有的,有兴趣的朋友点击蓝色字体挚爱java或者http://how2j.cn/k/socket/socket-socket/400.html?p=41058网址,里面有更多学习内容等你来拿,谢谢朋友们。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值