应用简单的socket,来达到两台机器的对话。这里提供的是访问server端并按你的要求(名字),索要server服务端中数据库中对应名字的电话。还有一个就是返回自身的IP地址。(数据库内容略)
对于server端的代码:
import
java.io.DataInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Myserver ... {
private final static String PRE_NAME = "Name:";
@SuppressWarnings( ...{ "deprecation" })
public static void main(String args[]) ...{
ServerSocket server;
Socket socket;
String s;
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try ...{
// 在端口4321注册服务
server = new ServerSocket(9000);
// 监听窗口,等待连接
System.out.println("******************************");
System.out.println("* server ok *");
System.out.println("******************************");
socket = server.accept();
// 获得对应Socket的输入/输出流
Is = socket.getInputStream();
Os = socket.getOutputStream();
// 建立数据流
DIS = new DataInputStream(Is);
PS = new PrintStream(Os);
DataInputStream in = new DataInputStream(System.in);
while (true) ...{
System.out.println("");
System.out.println("please wait client's message...");
System.out.println("");
s = DIS.readLine(); // 读入从client传来的字符串
System.out.println("client said:" + s); // 打印字符串
// if (s.trim().equals("BYE"))
// break; // 如果是"BYE",就退出
if (s.toUpperCase().trim().equals("MyAd".toUpperCase())) ...{
s = socket.getRemoteSocketAddress().toString();
}
else if (s.toUpperCase().trim().startsWith(PRE_NAME.toUpperCase())) ...{
// 调用数据库查询Address函数
if (s.length() > PRE_NAME.length()) ...{
String name = s.substring(PRE_NAME.length());
name = new String(name.getBytes("UTF-8")); /// 汉字要求!~
if (!"".equals(name.trim())) ...{
s = String.valueOf(Daoconnect.getAdressbyName(name.trim()));
}
}
}
else ...{
System.out.print("you say:");
s = in.readLine();
}
PS.println(s); // 将读取得字符串传给client
if (s.trim().equals("BYE"))
break; // 如果是"BYE",就退出
}
// 关闭连接
DIS.close(); // 关闭数据输入流
PS.close(); // 关闭数据输出流
Is.close(); // 关闭输入流
Os.close(); // 关闭输出流
socket.close(); // 关闭sockey
}
catch (Exception e) ...{
System.out.println("Error:" + e);
}
}
}
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Myserver ... {
private final static String PRE_NAME = "Name:";
@SuppressWarnings( ...{ "deprecation" })
public static void main(String args[]) ...{
ServerSocket server;
Socket socket;
String s;
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try ...{
// 在端口4321注册服务
server = new ServerSocket(9000);
// 监听窗口,等待连接
System.out.println("******************************");
System.out.println("* server ok *");
System.out.println("******************************");
socket = server.accept();
// 获得对应Socket的输入/输出流
Is = socket.getInputStream();
Os = socket.getOutputStream();
// 建立数据流
DIS = new DataInputStream(Is);
PS = new PrintStream(Os);
DataInputStream in = new DataInputStream(System.in);
while (true) ...{
System.out.println("");
System.out.println("please wait client's message...");
System.out.println("");
s = DIS.readLine(); // 读入从client传来的字符串
System.out.println("client said:" + s); // 打印字符串
// if (s.trim().equals("BYE"))
// break; // 如果是"BYE",就退出
if (s.toUpperCase().trim().equals("MyAd".toUpperCase())) ...{
s = socket.getRemoteSocketAddress().toString();
}
else if (s.toUpperCase().trim().startsWith(PRE_NAME.toUpperCase())) ...{
// 调用数据库查询Address函数
if (s.length() > PRE_NAME.length()) ...{
String name = s.substring(PRE_NAME.length());
name = new String(name.getBytes("UTF-8")); /// 汉字要求!~
if (!"".equals(name.trim())) ...{
s = String.valueOf(Daoconnect.getAdressbyName(name.trim()));
}
}
}
else ...{
System.out.print("you say:");
s = in.readLine();
}
PS.println(s); // 将读取得字符串传给client
if (s.trim().equals("BYE"))
break; // 如果是"BYE",就退出
}
// 关闭连接
DIS.close(); // 关闭数据输入流
PS.close(); // 关闭数据输出流
Is.close(); // 关闭输入流
Os.close(); // 关闭输出流
socket.close(); // 关闭sockey
}
catch (Exception e) ...{
System.out.println("Error:" + e);
}
}
}
client端的代码:
import
java.net.
*
;
import java.io. * ;
public class Myclient ... {
private final static String HOSTADRESS= "192.168.1.100";
@SuppressWarnings(...{"deprecation"})
public static void main(String args[]) ...{
//判断主机地址有没有
System.out.println("***??");
if ("".equals(HOSTADRESS) || HOSTADRESS == null) ...{
System.out.println("you forget the name of the server!");
System.exit(1);
}
Socket socket;
String s = "";
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try ...{
// 注意端口号要与服务器保持一致
socket = new Socket(HOSTADRESS, 9000);
System.out.println("*********************************");
System.out.println("* client ok *");
System.out.println("*********************************");
// 获得对应socket的输入/输出流
Is = socket.getInputStream();
Os = socket.getOutputStream();
// 建立数据流
DIS = new DataInputStream(Is);
PS = new PrintStream(Os);
DataInputStream in = new DataInputStream(System.in);
while (true) ...{
System.out.print("you say:");
s = in.readLine(); // 读取用户输入的字符串
PS.println(new String(s.getBytes("UTF-8"))); // 将读取得字符串传给server
if (s.trim().equals("BYE"))
break; // 如果是"BYE",就退出
else
...{
System.out.println("");
System.out.println("please wait server's message...");
System.out.println("");
}
s = DIS.readLine(); // 从服务器获得字符串
System.out.println("server said:" + s); // 打印字符串
if (s.trim().equals("BYE"))
break; // 如果是"BYE",就退出
}
// 关闭连接
DIS.close(); // 关闭数据输入流
PS.close(); // 关闭数据输出流
Is.close(); // 关闭输入流
Os.close(); // 关闭输出流
socket.close(); // 关闭socket
}
catch (Exception e) ...{
System.out.println("Error:" + e);
}
}
}
import java.io. * ;
public class Myclient ... {
private final static String HOSTADRESS= "192.168.1.100";
@SuppressWarnings(...{"deprecation"})
public static void main(String args[]) ...{
//判断主机地址有没有
System.out.println("***??");
if ("".equals(HOSTADRESS) || HOSTADRESS == null) ...{
System.out.println("you forget the name of the server!");
System.exit(1);
}
Socket socket;
String s = "";
InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try ...{
// 注意端口号要与服务器保持一致
socket = new Socket(HOSTADRESS, 9000);
System.out.println("*********************************");
System.out.println("* client ok *");
System.out.println("*********************************");
// 获得对应socket的输入/输出流
Is = socket.getInputStream();
Os = socket.getOutputStream();
// 建立数据流
DIS = new DataInputStream(Is);
PS = new PrintStream(Os);
DataInputStream in = new DataInputStream(System.in);
while (true) ...{
System.out.print("you say:");
s = in.readLine(); // 读取用户输入的字符串
PS.println(new String(s.getBytes("UTF-8"))); // 将读取得字符串传给server
if (s.trim().equals("BYE"))
break; // 如果是"BYE",就退出
else
...{
System.out.println("");
System.out.println("please wait server's message...");
System.out.println("");
}
s = DIS.readLine(); // 从服务器获得字符串
System.out.println("server said:" + s); // 打印字符串
if (s.trim().equals("BYE"))
break; // 如果是"BYE",就退出
}
// 关闭连接
DIS.close(); // 关闭数据输入流
PS.close(); // 关闭数据输出流
Is.close(); // 关闭输入流
Os.close(); // 关闭输出流
socket.close(); // 关闭socket
}
catch (Exception e) ...{
System.out.println("Error:" + e);
}
}
}
注意 以上实验的填自己真实的IP地址。
此代码已通过实验是可行的,有问题可以找我联系。