Socket 编程

Java Socket编程

Socket编程又称为套接字编程,理论方面就不说了,这里说说具体的实现

以下是时现,二者相互读写即聊天的代码。

1、打开网络

2、用流进行数据读写

3、关闭网络


如下代码:

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;



public class ServerSocketDemo {



/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

ServerSocket ss = new ServerSocket(6699);// 建立服务器端9999端口的监听

// Socket sc=new Socket("IP地址",9999);//客户端程序

Socket sc = ss.accept();// 建立连接

/* 连接只能一次一次建立 */

InputStream in = sc.getInputStream();// 获得连接的输入流

OutputStream out = sc.getOutputStream();// 获得输出流

ServerSocketRead ssr = new ServerSocketRead(in);// 将读线程类实例化

ServerSocketWrite ssw = new ServerSocketWrite(out);// 将写的线程类实例化

Thread tsr = new Thread(ssr);// 创建读写线程

Thread tsw = new Thread(ssw);

tsr.start();

tsw.start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}



}
读线程:

import java.io.DataInputStream;

import java.io.IOException;

import java.io.InputStream;



public class ServerSocketRead implements Runnable {

private InputStream in;// 输入流是所有读操作的载体



public ServerSocketRead(InputStream in) {

super();

this.in = in;

}



@Override

public void run() {

// TODO Auto-generated method stub

DataInputStream dis = new DataInputStream(in);//用数据输入流读取数据

try {

while (true) {//让程序循环执行

String str = dis.readUTF();//从输入流读取用UTF编码的字符串

System.out.println("客户端说:" + str);

if("Bye".equals(str)){//加个判断条件在客户端退出的时候服务器端使命结束需要退出。

System.out.println("客户端即将下线!");

System.exit(0);//退出

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}



}

写线程:

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;



public class ServerSocketWrite implements Runnable {

private OutputStream out;//输出流作为写操作传输的载体

public ServerSocketWrite(OutputStream out) {

super();

this.out = out;

}

@Override

public void run() {

DataOutputStream dos=new DataOutputStream(out);//用数据输出流处理洗操作并传递到连接里

BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));//从键盘获得键盘输入流

try {

while(true){//为了多次写

String str =buf.readLine();//读取一行键盘输入

System.out.println("服务器端说:"+str);

dos.writeUTF(str);//以UTF编码格式将从键盘读取的输入流字符串放到输出流里面传到socket连接里

/*得给一个结束的标志,防止程序死循环*/

if("Bye".equals(str)){//当写完Bye之后服务器关闭,服务器端程序正常退出

System.out.println("服务器即将关闭!");

System.exit(0);//正常退出


}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



}



}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值