服务端与客户端
ServerSocket与Socket
若干客户端Socket可以连接同一个ServerSocket
可用端口范围:0-65535,一般情况下1000以下端口为系统占用,不建议应用程序使用
常见端口:80 Http端口
21 ftp端口
23 telnet端口
25 SMTP端口
8080 tomcat默认端口(常和oracle web服务器冲突)
1521 oracle数据库服务端口
3306 mysql数据库服务端口
ServerSocket类用于倾听一个客户端Socket连接,如果没有连接,就一直等待.
倾听方法为:accept()这个是一个阻塞方法.
Socket类表示一个系统的IP地址和端口号的结合
TCP/IP连接的一个端点.
用来处理两个流对象
====================================================================================
服务端代码示例:
package com.szy.day11_Socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
*
* 1.创建ServerSocket,并指定服务端口
* 2.通过ServerSocket倾听客户端连接
* 3.打印连接成功
* 4.获取连接客户端的socket
* 5.创建用于给客户端发送信息的线程SendInfoToClientThread,并将对应客户端的输出流传入
* 6.通过Socket获取输入流,用于读取来自客户端发过来的信息
* 7.将信息打印到控制台
* @author soft1
*
*/
public class MyServer {
public static void main(String[] args) {
try {
//1
ServerSocket server=new ServerSocket(8855);
//2使用循环可以一直倾听着
while(true){
Socket socket=server.accept();
//3
System.out.println("有客户端和我连接上了!!");
/**
* 通过socket获取客户端发过来的信息
*/
InputStream is=socket.getInputStream();
InputStreamReader reader=new InputStreamReader(is);
BufferedReader br=new BufferedReader(reader);
//5向客户端发送消息
SendInfoToClientThred thread=new SendInfoToClientThred(socket.getOutputStream());
thread.start();
String info;
while(true){
info=br.readLine();//获取一行信息
if(info==null){
break;
}
System.out.println("客户端说:"+info);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
========================================================================================
客户端代码示例:
package com.szy.day11_Socket;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* 客户端
*
* 1.创建Socket,并指定服务端ip以及服务端口号 注意,一旦创建Socket实例,会立刻通过ip于端口连接服务端
* 2.创建用于接收服务端信息的线程ReadeInfoFromServer,并将对应的服务端的输入流传入
* 3.通过Socket获取输入流,用于发送信息给服务端
* @author soft1
*/
public class Client {
public static void main(String[] args) {
try {
/**
* 表示本机的地址形式:
* 1.本机的ip
* 2.localhost
* 3.127.0.0.1
*/
//1
Socket socket=new Socket("localhost",8855);
//2
ReadInfoFromServer rfs=new ReadInfoFromServer(socket.getInputStream());
rfs.start();
//3向服务端写数据
Scanner console=new Scanner(System.in);
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
while(true){
String str=console.nextLine();
pw.println(str);
pw.flush();//真正的写出操作
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}