网络开发Socket和ServerSocket

已经发表个人公众号

Socket和ServerSocket


Socket为“孔”或“插座”,创建Socket,打开连接Socket的输入或输出流,对Socket进行读写,关闭Socket。


Accept方法用于产生“阻塞”,这里有getInputStream方法和getOutInputStream方法,会产生一个IOException,


在Java.net包中,有Socket和ServerSocket两个类。以JDK1.6介绍:


构造方法

public Socket()
public Socket(String host, int port)
//host - 主机名,或者为 null,表示回送地址
//port - 端口号

public Socket(InetAddress address,int port)
//address - IP 地址
//port - 端口号

ServerSocket类有3个构造方法

ServerSocket(int port)

ServerSocket(int port,int backlog)

ServerSocket(int port,int backlog,InetAddress binAddr)
服务器与客户端通信

package two;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSocket1 {
 public static void main(String[] args) {
   // TODO Auto-generated method stub
   try {
     ServerSocket ss = new ServerSocket(2007);
     while(true) {
       Socket s = ss.accept();
       InputStream is = s.getInputStream();
       OutputStream os = s.getOutputStream();
       PrintStream ps = new PrintStream(os);
       ps.println("helloworld, i am server thinkpad");
       
       DataInputStream dis = new DataInputStream(is);
       String str = dis.readLine();
       System.out.println(str);
       s.close();
       
     }
   }
   catch(IOException ee) {
     System.out.println(ee);
   }
   catch(Exception e) {
     System.out.println(e);
   }
 }
}
package two;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ConnectException;
import java.net.Socket;

public class ClientSocket {
 public static void main(String[] args) {
   // TODO Auto-generated method stub
   try {
     Socket s = new Socket("########",2007);
     InputStream is = s.getInputStream();
     OutputStream os = s.getOutputStream();
     PrintStream ps = new PrintStream(os);
     ps.println("hello , i am client");
     
     DataInputStream dis = new DataInputStream(is);
     
     String str = dis.readLine();
     System.out.println(str);
     s.close();
     
   }
   catch(ConnectException eee) {
     System.out.println(eee);
   }
   catch(IOException ee) {
     System.out.println(ee);
   }
   catch(Exception e) {
     System.out.println(e);
   }
 }
}
线程:


线程也称为轻量级进程,是程序执行的最小单元。是程序中一个单一的顺序控制流程,在程序中同时运行多个线程,称为多线程。进程是一个可执行的程序。一个应用可以有一个或多个进程,对于一个进程可以有一个或多个线程,其中一个是主线程,public static void main。


创建,执行线程的速度比进程更快。


多客户请求服务

public class DuoServer{
public static void main(String[] args){
 boolean connected = true;
 try{
  ServerSocket ss = new ServerSocket(2007);
  int clientnum=0;
  while(connected){
   ServerThread st = new ServerThread(ss.accept(),clientnum);
   st.start();
   clientnum++;
   System.out.println(clientnum);
  }
}
catch(Excepiton e){
 System.out.println(e);
}
}
}

class ServerThread extends Thread{
private Socket s;
int clientnum;
public ServerThread(Socket s, int num){
 this.s = s;
 clientnum = num + 1;
}
public void run(){
 try{
  InputStream is = s.getInputStream();
  OutputStream os = s.getOutputStream();
  PrintStream ps = new PrintStream(os);
  ps.println("i am server");
  
  DataInputStream dis = new DataInputStream(is);
  String str = dis.readLine();
  System.out.println(str);
  }
  catch(Excepiton e){
   System.out.println(e);
  }
 }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的SocketServerSocket是基于TCP协议实现的网络编程,用于在网络上建立连接、传输数据和关闭连接。Socket用于客户端,ServerSocket用于服务器端。下面对它们的使用进行分析和总结。 1. Socket使用 Socket提供了一些方法用于建立连接、发送数据和关闭连接,其中常用的方法包括: - Socket(String host, int port):构造一个新的Socket对象,并连接到指定的主机和端口。 - getInputStream()和getOutputStream():分别返回Socket的输入和输出流,用于读取和写入数据。 - close():关闭Socket连接。 在使用Socket时,需要注意以下几点: - Socket对象的创建和关闭应该在同一个线程中完成,避免出现资源竞争和线程安全的问题。 - Socket连接建立后,需要及时关闭连接,避免出现资源占用和安全隐患。 2. ServerSocket使用 ServerSocket用于在服务器端监听客户端连接请求,并创建Socket对象进行通信。常用的方法包括: - ServerSocket(int port):创建一个新的ServerSocket对象,并监听指定端口上的连接请求。 - accept():接受客户端的连接请求,并返回一个新的Socket对象,用于与客户端进行通信。 - close():关闭ServerSocket对象。 在使用ServerSocket时,需要注意以下几点: - ServerSocket对象应该在程序启动时创建,而不是每次处理连接请求时都创建一个新的ServerSocket对象。 - ServerSocket对象只需要监听一次,即可接受多个客户端的连接请求。 - ServerSocket对象的关闭应该在所有客户端连接都关闭后进行。 总的来说,SocketServerSocket是Java中基于TCP协议实现的网络编程,使用起来需要注意线程安全、资源释放、异常处理等问题。熟练掌握它们的使用,可以帮助我们开发出高效、稳定的网络应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值