网络开发Socket和ServerSocket

Posted 黄广达

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络开发Socket和ServerSocket相关的知识,希望对你有一定的参考价值。

有趣有内涵的文章第一时间送达!


 喝酒I创作I分享


生活中总有些东西值得分享

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 网络开发Socket和ServerSocket 网络开发Socket和ServerSocket

网络开发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);
  }
 }
}




喜欢本文的朋友们

欢迎长按下图关注订阅号

收看更多精彩内容


以上是关于网络开发Socket和ServerSocket的主要内容,如果未能解决你的问题,请参考以下文章

网络编程socketserver的方法都有哪些

网络编程--Socket与ServerSocket

JAVA I/O网络Socket和ServerSocket

JAVA: Socket和ServerSocket网络编程

套接字 Socket 和 ServerSocket 讲解和实例

Java网络编程精解之ServerSocket用法详解二