客户端:
import java.net.*;
import java.io.*;
class B {
public static void main(String[] args){
Socket cSocket;
BufferedWriter writer;
try {
cSocket=new Socket("localhost",26260);
writer=new BufferedWriter(new OutputStreamWriter(cSocket.getOutputStream()));
writer.write("login");
writer.close();
cSocket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}服务器:
import java.net.*;
import java.io.*;
class MainServer {
public static void main(String[] args) {
ServerSocket ss;
Socket sIn;
OnlineThread ot;
try {
ss=new ServerSocket(26260);
synchronized(new Object()){
while (true) {
sIn = ss.accept();
new OnlineThread(sIn).start();
}
}
}
catch (Exception ex) {
System.out.println("端口绑定失败");
}
}
}class OnlineThread extends Thread{
private Socket cIn;
private BufferedReader reader;
private BufferedWriter writer;
String receiveStr;
public OnlineThread(Socket cIn){
this.cIn=cIn;
try {
reader = new BufferedReader(new InputStreamReader(cIn.getInputStream()));
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//登陆处理
public void run(){
while (true) {
try {
receiveStr = reader.readLine();
System.out.println(receiveStr);
}
catch (Exception ex) {
ex.printStackTrace();
}
if (receiveStr.equals("login"))
login();
else if (receiveStr.equals("logout"))
logout();
}
}
public void login() {
System.out.println("in"); }
public void logout(){
System.out.println("out");
}
}
import java.net.*;
import java.io.*;
class B {
public static void main(String[] args){
Socket cSocket;
BufferedWriter writer;
try {
cSocket=new Socket("localhost",26260);
writer=new BufferedWriter(new OutputStreamWriter(cSocket.getOutputStream()));
writer.write("login");
writer.close();
cSocket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}服务器:
import java.net.*;
import java.io.*;
class MainServer {
public static void main(String[] args) {
ServerSocket ss;
Socket sIn;
OnlineThread ot;
try {
ss=new ServerSocket(26260);
synchronized(new Object()){
while (true) {
sIn = ss.accept();
new OnlineThread(sIn).start();
}
}
}
catch (Exception ex) {
System.out.println("端口绑定失败");
}
}
}class OnlineThread extends Thread{
private Socket cIn;
private BufferedReader reader;
private BufferedWriter writer;
String receiveStr;
public OnlineThread(Socket cIn){
this.cIn=cIn;
try {
reader = new BufferedReader(new InputStreamReader(cIn.getInputStream()));
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//登陆处理
public void run(){
while (true) {
try {
receiveStr = reader.readLine();
System.out.println(receiveStr);
}
catch (Exception ex) {
ex.printStackTrace();
}
if (receiveStr.equals("login"))
login();
else if (receiveStr.equals("logout"))
logout();
}
}
public void login() {
System.out.println("in"); }
public void logout(){
System.out.println("out");
}
}
解决方案 »
- 为什么提示没有MAIN方法?
- 关于数组拷贝函数System.arraycopy的拷贝问题
- 用伪代码实现 子窗体显示
- Java处理bmp图像,怎样操作BMP位图的数据??(想对图像的各个像素进行操作) (可追加)在线等
- 求java计算器编写思路
- JDBC事务处理问题
- classes111.jar是什么数据库的驱动,可以用在jdbc-sql server2000中吗?在线等待
- 一个简单的问题?
- 我的appletviewer命令不起作用该怎么办?
- 我2000下的swing中文都显示成方块 怎么解决
- 请问java有没有象delphi中的showmessage相似功能的函数
- showConfirmDialog能否改变默认值?
if (receiveStr.equals("login")) //so NullPointerException
debug定位一下
import java.net.*;
import java.io.*;
class MainServer {
public static void main(String[] args) {
ServerSocket ss;
Socket sIn;
OnlineThread ot;
try {
ss=new ServerSocket(26260);
synchronized(new Object()){
while (true) {
sIn = ss.accept();
new OnlineThread(sIn).start();
}
}
}
catch (Exception ex) {
System.out.println("端口绑定失败");
}
}
}class OnlineThread extends Thread{
private Socket cIn;
private BufferedReader reader;
private BufferedWriter writer;
String receiveStr;
public OnlineThread(Socket cIn){
this.cIn=cIn;
try {
reader = new BufferedReader(new InputStreamReader(cIn.getInputStream()));
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//登陆处理
public void run(){
while (true) {
try {
receiveStr = reader.readLine();
System.out.println(receiveStr);
}
catch (Exception ex) {
ex.printStackTrace();
}
if (receiveStr.equals("login"))
login();
else if (receiveStr.equals("logout"))
logout();
break; // 添加
}
}
public void login() {
System.out.println("in"); }
public void logout(){
System.out.println("out");
}
}
//客户端:
import java.net.*;
import java.io.*;
class B {
public static void main(String[] args){
Socket cSocket;
BufferedWriter writer;
try {
cSocket=new Socket("localhost",26260);
writer=new BufferedWriter(new OutputStreamWriter(cSocket.getOutputStream()));
writer.write("login");
writer.close();
cSocket.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
while (true) {
sIn = ss.accept();
new OnlineThread(sIn).start();
}那么每一次连接的
//登陆处理 无须 while (true)
这样会导致客户端传过来的数据即便没有了,它还继续在读.于是就出现
NullPointerException!
当然,你可以交互和客户端交流,但是需在必要时刻break.这要自己控制了. : )