Socket编程

来源:互联网 发布:mac版变色龙工具下载 编辑:程序博客网 时间:2024/06/06 00:17
Socket编程  (启动顺序:先启动服务端,在启动客户端)


   服务端与客户端
   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();
}

}
}

原创粉丝点击