基于Socket的Java网络编程集粹
当前位置:以往代写 > JAVA 教程 >基于Socket的Java网络编程集粹
2019-06-14

基于Socket的Java网络编程集粹

基于Socket的Java网络编程集粹

其实,简朴的阐明一下,就可以看出客户和处事通讯的主要通道就是Socket自己,而处事器通过accept要领就是同意和客户成立通讯.这样当客户成立Socket的同时。处事器也会利用这一根连线来先后通讯,那么既然如此只要我们存在多条连线就可以了。那么我们的措施可以变为如下:

那么下面的问题是如何利用线程.首先要做的工作是建设线程并使得其可以和网络连线取得接洽。然后由线程来执行适才的操纵,要建设线程要么直接担任Thread要么实现Runnable接口,要成立和Socket的接洽只要通报引用就可以了.而要执行线程就必需重写run要领,而run要领所做的工作就是适才单线程版本main所做的工作,因此我们的措施酿成了这样:

import java.net.*;
  import java.io.*;
  public class MultiUser extends Thread{
  private Socket client;
  public MultiUser(Socket c){
  this.client=c;
  }
  public void run(){
  try{
   BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
   PrintWriter out=new PrintWriter(client.getOutputStream());
   //Mutil User but can parallel
   while(true){
    String str=in.readLine();
    System.out.println(str);
    out.println("has receive....");
    out.flush();
    if(str.equals("end"))
     break;
   }
   client.close();
  }catch(IOException ex){
  }finally{
  }
  }
  public static void main(String[] args)throws IOException{
  ServerSocket server=new ServerSocket(5678);
  while(true){
  //transfer location change Single User or Multi User
  MultiUser mu=new MultiUser(server.accept());
  mu.start();
  }
  }
  }

客户端代码:

import Java.net.*;
import Java.io.*;
public class Client{
static Socket Server;
public static void main(String[] args) throws Exception
{
Server=new Socket (InetAddress.getLocalHost(),5678);
BufferedReader in=new BufferedReader(new InputStreamReader(Server.getInputStream()));
PrintWriter out=new PrintWriter(Server.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end"))
{
break;
}
System.out.println(in.readLine());
}
Server.close();
}
}

这段措施是接管客户的键盘输入,并把信息输出随处事端。并把"end"作为退出的呼吁

以上措施完成了两台计较机的简朴通信。

    关键字:

在线提交作业