有趣的Socket编程(聊天代码)

单线程的聊天代码,一次只能发取一条和接收一条,不能回车发送多条~!

//服务器端

import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;

public class TestServer {
public static void main(String args[]) {
   try {  
    ServerSocket s = new ServerSocket(8888);
    Socket s1 = s.accept();
    OutputStream os = s1.getOutputStream();
    DataOutputStream dos = new DataOutputStream(os);
    InputStream is = s1.getInputStream();
    DataInputStream dis = new DataInputStream(is);
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
   
    String info;
    while(true){
     info = dis.readUTF();
     System.out.println("对方说: " + info);
     if(info.equals("bye"))
      break;
     info = br.readLine();
     dos.writeUTF(info);
     if(info.equals("bye"))
      break;
    }
    dis.close();   
    dos.close();
    s1.close();
    s.close();
   }catch (SocketException e) {
     System.out.println("网络连接异常,程序退出!");
   }catch (IOException e) {
    e.printStackTrace();  
   }
}
}

//客户端

import java.io.*;
import java.net.Socket;
import java.net.SocketException;

public class TestClient {
public static void main(String args[]) {
   try {  
    Socket s1 = new Socket("localhost",8888);
    InputStream is = s1.getInputStream();
    DataInputStream dis = new DataInputStream(is);
    OutputStream os = s1.getOutputStream();
    DataOutputStream dos = new DataOutputStream(os);
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
   
    String info;
    while(true){
     info = br.readLine();
     dos.writeUTF(info);
     if(info.equals("bye"))
      break;
     info = dis.readUTF();
     System.out.println("对方说: " + info);
     if(info.equals("bye"))
      break;
    }
    dis.close();   
    dos.close();
    s1.close();
   }catch (SocketException e) {
     System.out.println("网络连接异常,程序退出!");
   }catch (IOException e) {
    e.printStackTrace();  
   }
}
}

 

//下面是多线程的聊天模式,可以一方发送多条信息给对方!

//服务器端

import java.io.*;
import java.net.*;
public class TestClient {
 public static void main(String args[]) {
  try {  
   Socket s1 = new Socket("127.0.0.1",8888);
   InputStream is = s1.getInputStream();
   DataInputStream dis = new DataInputStream(is);
   OutputStream os = s1.getOutputStream();
   DataOutputStream dos = new DataOutputStream(os);
   new MyClientReader(dis).start();   
   new MyClientWriter(dos).start();
  }catch (IOException e) {
   e.printStackTrace();  
  }
 }
}
class MyClientReader extends Thread{
 private DataInputStream dis;
 public MyClientReader(DataInputStream dis ){
  this.dis = dis; 
 }
 public void run(){
  String info;
  try{
   while(true){
    info = dis.readUTF();
    System.out.println("对方说: " + info);
    if(info.equals("bye")){
     System.out.println("对方下线,程序退出!");
     System.exit(0);
    }
   }  
  }catch (IOException e) {
   e.printStackTrace();  
  } 
 }  
}
class MyClientWriter extends Thread{
 private DataOutputStream dos;
 public MyClientWriter(DataOutputStream dos){
  this.dos = dos; 
 }
 public void run(){
  InputStreamReader isr = new InputStreamReader(System.in);
  BufferedReader br = new BufferedReader(isr);
  String info;
  try{
   while(true){
    info = br.readLine();
    dos.writeUTF(info);
    if(info.equals("bye")){
     System.out.println("自己下线,程序退出!");
     System.exit(0);
    }
   }  
  }catch (IOException e) {
   e.printStackTrace();  
  } 
 }  
}
 
//客户端
import java.io.*;
import java.net.*;
public class TestServer {
 public static void main(String args[]) {
  try {  
   ServerSocket s = new ServerSocket(8888);
   Socket s1 = s.accept();
   OutputStream os = s1.getOutputStream();
   DataOutputStream dos = new DataOutputStream(os);
   InputStream is = s1.getInputStream();
   DataInputStream dis = new DataInputStream(is);
   new MyServerReader(dis).start();   
   new MyServerWriter(dos).start();
  }catch (IOException e) {
   e.printStackTrace();  
  }
 }
}
class MyServerReader extends Thread{
 private DataInputStream dis;
 public MyServerReader(DataInputStream dis ){
  this.dis = dis; 
 }
 public void run(){
  String info;
  try{
   while(true){
    info = dis.readUTF();
    System.out.println("对方说: " + info);
    if(info.equals("bye")){
     System.out.println("对方下线,程序退出!");
     System.exit(0);
    }
   }  
  }catch (IOException e) {
   e.printStackTrace();  
  } 
 }  
}
class MyServerWriter extends Thread{
 private DataOutputStream dos;
 public MyServerWriter(DataOutputStream dos){
  this.dos = dos; 
 }
 public void run(){
  InputStreamReader isr = new InputStreamReader(System.in);
  BufferedReader br = new BufferedReader(isr);
  String info;
  try{
   while(true){
    info = br.readLine();
    dos.writeUTF(info);
    if(info.equals("bye")){
     System.out.println("自己下线,程序退出!");
     System.exit(0);
    }
   }  
  }catch (IOException e) {
   e.printStackTrace();  
  } 
 }  
}

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值