Socket一

package com.itown.hbportal.common.process.test;

import java.net.*;
import java.io.*;
import java.lang.*;
import java.net.*;
import java.io.*;

//实现Client端功能的ClientApp.java原文件:
public class ClientApp {
public static void main(String args[]) {
try {
// 创建通讯并且和主机Rock连接
Socket cSocket = new Socket("192.168.100.188", 8018);
// 打开这个Socket的输入/输出流
OutputStream os = cSocket.getOutputStream();
DataInputStream is = new DataInputStream(cSocket.getInputStream());
int c;
boolean flag = true;
String responseline;
while (flag) {
// 从标准输入输出接受字符并且写如系统
while ((c = System.in.read()) != -1) {
os.write((byte) c);
if (c == '\n') {
os.flush();
//将程序阻塞,直到回答信息被收到后将他们在标准输出上显示出来
responseline = is.readLine();
System.out.println("Message is:" + responseline);
}
}
}
os.close();
is.close();
cSocket.close();
} catch (Exception e) {
System.out.println("Exception :" + e.getMessage());
}
}
}

// 实现Server端功能的ServerApp.java原文件:
class ServerApp {
public static void main(String args[]) {
try {
boolean flag = true;
Socket clientSocket = null;
String inputLine;
int c;
ServerSocket sSocket = new ServerSocket(8018);
System.out.println("Server listen on:" + sSocket.getLocalPort());
while (flag) {
clientSocket = sSocket.accept();
DataInputStream is = new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
OutputStream os = clientSocket.getOutputStream();
while ((inputLine = is.readLine()) != null) {
// 当客户端输入stop的时候服务器程序运行终止!
if (inputLine.equals("stop")) {
flag = false;
break;
} else {
System.out.println(inputLine);
while ((c = System.in.read()) != -1) {
os.write((byte) c);
if (c == '\n') {
os.flush(); // 将信息发送到客户端
break;
}
}
}
}
is.close();
os.close();
clientSocket.close();
}
sSocket.close();
} catch (Exception e) {
System.out.println("Exception :" + e.getMessage());
}
}
}

Socket多线程应该是:
服务器端处于等待状态,当有客户端请求时专门开启一个线程为其服务,当此访问结束则该线程关闭;

使用场景:
1、JAVA 与 QQ 网络通讯实例;java调用腾讯通通讯的应用。
2、聊天室应用。

用以下方法可以较好的解决Socket性能和对Web应用的影响:
1、试试nio包吧SocketChanel,效率高一些,也不容易在高并发情况下影响稳定性,不过nio是基于缓存的,容易造成数据包异常,要做一些处理。
2、在web应用外面独立编写一个Socket应用,web通过和这个应用通讯完成原来写在页面的通讯代码,这样不容易因为网络问题造成意外影响。
3、如果如你所说,是一个不断的长连接,可以在tomcat或应用启动的时候就建立一些连接,并定期检查连接状态,或定期重新连接,周期不要太短。web中所有的socket通讯都由这个连接完成。

你可能感兴趣的:(socket)