Socket:一个Socket由一个IP地址和一个端口号唯一确定
ServerSocket:服务器端套接字,接收请求
TCP:传输控制协议,是可靠协议,必须先建立连接
UDP:用户数据报协议
Socket
java在包java.net中提供了两个类 Socket和ServerSocket,分别用来表示双向连接的客户端和服务端,其构造函数:
Socket(String host,int port);
Socket(String host,int port,boolean stream);
Socket(InetAddress address,int port);
Socket(InetAddress address,int port,boolean stream);
其中address,host和port分别是双向连接中另一方的IP地址,主机名和端口号,stream指明socket是流socket还是数据报socket。
在选择端口时,要选大于1023的数,因为0~1023是系统保留的端口号
package socketDemo;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
public class ServerSocketDemo {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(1234);
while (true) {
Socket socket = ss.accept();
InetAddress sa = socket.getInetAddress();
System.out.println("sa.getHostAddress()" + ":" + sa.getHostAddress());
System.out.println("sa.getHostName()" + ":" + sa.getHostName());
System.out.println("sa.getAddress()" + ":" + sa.getAddress());
System.out.println("socket.getPort()" + ":" + socket.getPort());
System.out.println(sa.toString() + "连接成功了");
System.out.println("正在接收");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package socketDemo;
import java.net.Socket;
public class SocketDemo {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 1234);
System.out.println("socket");
} catch (Exception e) {
e.printStackTrace();
}
}
}
用Socket实现文本传输
package socketDemo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketDemo {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(1234);
while (true) {
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"gbk"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,"gbk"));
String line = null;
while((line = br.readLine()) != null){
System.out.println("收到数据" + line);
String send = "hello ," + line + "\r\n" ;
bw.write(send);
bw.flush();
System.out.println("发送了" + send);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package socketDemo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class SocketDemo {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 1234);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"gbk"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,"gbk"));
bw.write("abc\r\n");
bw.flush();
System.out.println(br.readLine());
bw.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}