越早知道越好(java创建websocket服务)java socketserver,JAVA socket服务器搭建,java soap 服务器,
(内网外网兼可行)
注意事项:
关闭防火墙,各种安全软件通通关掉,测试通过了在逐项重新开启,开启的时候记得跟随测试,遇到不能开启的就直接让他滚蛋吧。
最好先用局域网测试,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("尚未学习");
}
}
};本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据