初学Java的的网络编程
java中需要使用 ServerSocket 类和 Socket 类
基于请求-xiangying
ServerSocket服务端,在客户端未请求时监听端口,当监听到客户端请求时返回一个socket对象,利用io传输数据
服务端
public class MulThreadSocketServer {
public static void main(String [] args){
ServerSocket serverSocket = null;
套接字socket = null;
//监听端口号
int port = 44321;
尝试{
//建立连接
serverSocket =新的ServerSocket(端口);
的System.out.println( “服务器已启动:”);
while(true){
//获得连接
socket = serverSocket.accept();
//启动线程
new LogicThread(socket);
}
catch(Exception e){
e.printStackTrace();
} finally {
try {
//关闭连接
serverSocket.close();
} catch(Exception e){}
}
}
}
同时接受多个客户端请求
利用鲜橙线程,每监听到一个客户端请求就分发一个线程
线程类
公共类LogicThread扩展Thread {
Socket socket;
InputStream是;
OutputStream os;
公共LogicThread(套接字套接字){
this.socket =套接字;
开始(); //启动线程
}
public void run(){
byte [] b = new byte [1024];
尝试{
//初始化流
os = socket.getOutputStream();
is = socket.getInputStream();
for(int i = 0; i <3; i ++){
//读取数据
int n = is.read(b);
//逻辑处理String data = new String(b,0,n); 的System.out.println( “客户端发送数据:” +数据); // data-data if(data.equals(“AAA”)){ data =“小姐姐”; } else if(data.equals(“BBB”)){ data =“gay”; } else {
data =“AAA”;
} os.write(data.getBytes()); } } catch(Exception e){ e.printStackTrace(); } finally { close(); } } / ** * *关闭流和连接* / private void close(){ try { //关闭流和连接os.close(); is.close(); socket.close(); } catch(Exception e){ } } / ** * *逻辑处理方法,实现echo逻辑* * @param b *客户端发送数据缓冲区* * @param off *起始下标* * @param len *有效数据长度* * @return
客户端
public class SimpleSocketClient {
public static void main(String [] args){
Socket socket = null;
InputStream = null;
OutputStream os = null;
//服务器端IP地址
String serverIP =“127.0.0.1”;
//服务器端口号
int port = 44321;
//发送内容
try {
//建立连接
socket = new Socket(serverIP,port);
//初始化流
os = socket.getOutputStream();
is = socket.getInputStream();
字节[] b =新字节[1024];
for(int i = 0; i <3; i ++){
System.out.println(“A:”);
//发送数据
Scanner inputScanner = new Scanner(System.in);
String data = inputScanner.next();
os.write(data.getBytes());
//接收数据
int n = is.read(b);
//输出反馈数据
System.out.println(“服务器反馈:”+ new String(b,0,n));
}
} catch(Exception e){
e.printStackTrace(); //打印异常信息
} finally {
try {
//关闭流和连接
is.close();
os.close();
socket.close();
} catch(Exception e2){
}
}
}
}
* /
private byte [] logic(byte [] b,int off,int len){
byte [] response = new byte [len];
//将有效数据拷贝到数组响应中
System.arraycopy(b,0,response,0,len);
回复回复;
}
}