基于TCP协议的Socket编程
服务端代码
public class ServerLogin {
public static void main(String[] args) throws IOException {
//1.创建一个serverSocket对象,指定端口号
ServerSocket serverSocket = new ServerSocket(8000);
//2.监听客户端请求
Socket scoket = serverSocket.accept();
//3.获取输入流,获得客户端发来的消息
InputStream is = scoket.getInputStream();
//4.获取输出流,向客户端写消息
OutputStream os = scoket.getOutputStream();
//5.读取字符串,用BufferedReader
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
String info = null;
while ((info=bufferedReader.readLine())!=null) {
System.out.println("我是服务器,客户端信息是"+info);
}
//6.关闭输入流
scoket.shutdownInput();
//7.向客户端发消息
info="欢迎您,登陆成功!";
os.write(info.getBytes());
bufferedReader.close();
//8.关闭输出流
os.close();
//9.关闭监听
scoket.close();
//10.关闭socket 服务
serverSocket.close();
}
}
客户端代码
public class ClientLogin {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建一个socket对象(指定服务器IP,端口号);
Socket socket = new Socket("localhost",8000);
//2.获得输出流,发送请求
OutputStream os = socket.getOutputStream();
//3,获得输入流,接受服务端信息。
InputStream is = socket.getInputStream();
//4.向服务器段发送消息
String info="用户名:tom,密码:123";
os.write(info.getBytes());
//5.关闭输出流。
socket.shutdownOutput();
//6.获得服务端推送的信息。
BufferedReader bReader = new BufferedReader(new InputStreamReader(is));
info = "";
while((info=bReader.readLine())!=null){
System.out.println("我是客户端,服务器响应的是:"+info);
}
//读完关闭
os.close();
//6.关闭输入流
is.close();
//7.关闭socket
socket.close();
}
}
基于UDP协议的Socket编程
服务端代码
public class ReceiveSocket {
public static void main(String[] args) {
DatagramPacket dp = null;
DatagramSocket ds = null;
DatagramPacket dpto = null;
try {
//创建DatagramPacket 对象,用来准备接收数据包
byte[] buf = new byte[1024];
dp = new DatagramPacket(buf, buf.length);
//创建DatagramSocket对象接收数据
ds = new DatagramSocket(8800);
ds.receive(dp);
//显示接收到的信息
String mess = new String(dp.getData(),0,dp.getLength());
System.out.println(dp.getAddress().getHostAddress()+"说:"+mess);
String reply ="你好,我在,请咨询!";
//显示本地对话框
System.out.println("我 说:"+reply);
//创建DatagramPacket对象,封装发送数据
SocketAddress sa = dp.getSocketAddress();
dpto = new DatagramPacket(reply.getBytes(), reply.getBytes().length,sa);
//发送封包数据
ds.send(dpto);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
ds.close();
}
}
}
客户端发送代码
public class SendSocket {
public static void main(String[] args) {
InetAddress ip=null;
DatagramSocket ds=null;
try {
String messString="你好,我想咨询一个问题.";
//显示本地对话框
System.out.println("我说:"+messString);
//获得本机ip地址
ip = InetAddress.getByName("localhost");
//创建DatagramPacket 对象,封装数据
DatagramPacket dpDatagramPacket = new DatagramPacket(messString.getBytes(), messString.length(),ip,8800);
//创建DatagramSocket 对象,向服务器发送数据
ds = new DatagramSocket();
ds.send(dpDatagramPacket);
byte[] buf = new byte[1024];
DatagramPacket dpreDatagramPacket = new DatagramPacket(buf, buf.length);
//创建DatagramPacket 对象接收服务器发来的信息
ds.receive(dpreDatagramPacket);
//显示接收到的信息
String reply = new String(dpreDatagramPacket.getData(),0,dpreDatagramPacket.getLength());
System.out.println(dpreDatagramPacket.getAddress().getHostAddress()+"说"+reply);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
ds.close();
}
}
}