(内网外网兼可行)

注意事项:

关闭防火墙,各种安全软件通通关掉,测试通过了在逐项重新开启,开启的时候记得跟随测试,遇到不能开启的就直接让他滚蛋吧。

最好先用局域网测试,wifi就可以了。

socket通信地址为 IP地址+端口号(202.202.43.125:5264)。

端口号的范围1024---65536。

本机开启WiFi,且用本机作为服务器,客服端连入wifi测试外网的时候可能会出现connection reset错误。

服务器(MyEclipse):

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.io.OutputStream;

import com.ansj.vec.Word2VEC;

public class server {// 能收能发

staticString sendString= "你好好";

publicstatic void main(String[] args) throws IOException {

while(true) {

TestServer();

}

}

publicstatic void TestServer() throwsIOException {

// 1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听

ServerSocketserverSocket = new ServerSocket(65432);

// 2.调用accept()方法开始监听,等待客服端的连接

//System.out.println("***服务器即将启动,等待客服端连接***");

Socketsocket = serverSocket.accept();

// 3.获取输入流,并读取客服端信息

InputStreamis = socket.getInputStream();//字节输入流

InputStreamReaderisr = new InputStreamReader(is);//将字节流转换为字符流

BufferedReaderbr = new BufferedReader(isr);//为输入流添加缓冲

Stringinfo = null;

while((info=br.readLine())!=null) {//循环读取客服端的信息

System.out.println("\r"+info);

}

socket.shutdownInput();//关闭输入流

// 4.响应客服端 即给客服端发送信息

OutputStreamos = socket.getOutputStream();//字节输出流

PrintWriterpw = new PrintWriter(os);//将输出流包装为打印流

pw.write(sendString);//写入客户端的信息+只能是纯数字字符串

pw.flush();//调用flush()方法将缓冲输出

// 5.关闭资源

pw.close();

os.close();

br.close();

isr.close();

is.close();

socket.close();

serverSocket.close();

}

}

客服端(MyEclipse):

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

public class Client {

publicstatic void main(String[] args) throws UnknownHostException, IOException {

TestClient();

}

publicstatic void TestClient() {

try{

// 1. 创建客服端Socket,指定服务器地址和端口

//Socket socket = newSocket("192.168.253.1", 65432);//本地IP

Socket socket = newSocket("139.224.3.160", 65432);//本地IP

System.out.println("客户端启动...");

// 2. 获取输出流,向服务器端发送信息

OutputStreamos = socket.getOutputStream();//字节输出流

PrintWriterpw = new PrintWriter(os);//将输出流包装为打印流

pw.write("天王盖地虎,宝塔镇河妖");

pw.flush();

socket.shutdownOutput();//关闭输出流

// 3. 获取输入流,接收服务器的信息

InputStreamis = socket.getInputStream();//字节输入流

BufferedReaderbr = new BufferedReader(new InputStreamReader(is));//将字节流转换为字符流 为输入流添加缓冲

Stringinfo = null;

while((info=br.readLine())!=null) {//循环读取客服端的信息

System.out.println("我是客户端,服务器说: "+info);

}

// 4. 关闭相关资源

br.close();

is.close();

pw.close();

os.close();

socket.close();

}catch (UnknownHostException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

客户端(Android):

Android客户端和myeclipse客户端的主要区别是需要把网络放入run方法中运行,其次UI的更新要跳出线程(Thread),

地方大幅度

//==============

/** Socket 客户端*/

class MyThread extends Thread {

@Override

public void run() {

//定义消息

Message msg = new Message();

msg.what = 0x11;

Bundle bundle = new Bundle();

bundle.clear();

try {

//0. 获取输入的IP

EditTextedit_ip = (EditText) IatDemo.this.findViewById(R.id.net_IP_01);

String ip =edit_ip.getText().toString().trim();

//1. 创建客服端Socket,指定服务器地址和端口

Socket socket = new Socket(ip, 65432);//阿里云服务器 IP ok

System.out.println("localhost");

//2. 获取输出流,并向服务器端发送信息

OutputStreamos = socket.getOutputStream();//字节输出流

PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流

int name= 3;

pw.write(geted1);// 此地为 geted1 为发送到服务器的消息

pw.flush();

socket.shutdownOutput();//关闭输出流

//3. 获取输入流,接收服务器的信息

InputStreamis = socket.getInputStream();//字节输入流

BufferedReader br = new BufferedReader(newInputStreamReader(is));//将字节流转换为字符流为输入流添加缓冲

String info = null;

/** 接收服务器返回的标签 */

while ((info=br.readLine())!=null){//循环读取客服端的信息

System.out.println("我是客户端,服务器说: "+info);

String text0 = info;

Display = info;

/** 读出操作*/

mTts.startSpeaking(text0,null);

}

/** 不可 在此处修改UI 因为其为县城*/

/**所以跳出三界外去更新UI即可 */

IatDemo.this.runOnUiThread(updateThread);

//4. 关闭相关资源

br.close();

is.close();

pw.close();

os.close();

socket.close();

} catch (UnknownHostException e) {

System.err.println("错了 001");

e.printStackTrace();

} catch (IOException e) {

System.err.println("错了 002");

e.printStackTrace();

}

}// run()到此结束

}

//========== 线程外更新UI=======

Runnable updateThread = new Runnable()

{

@Override

public void run()

{

//更新UI

if (Display!= null) {

mCommandText.append(Display);

} else {

mCommandText.append("尚未学习");

}

}

};
分类: 百科知识 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录