Socket通讯,但是调试的过程接收不到内容。请大家帮忙给看看。
Tools.java[code = java]
Java codepublic class Tools {
public static String b2s(byte[] b){
char[] t;
int i=0;
t=new char[b.length];
while(i<b.length){
t[i]=(char)b[i];
i++;
}
return new String(t);
}public static byte[] s2b(String b){
byte[] t;
int i=0;
t=new byte[b.length()];
while(i<b.length()){
t[i]=(byte)b.charAt(i);
i++;
}
return t;
}
}[/code]
testsocket.javaimport java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class testsocket {
ServerSocket ss;
Socket sk;
DataInputStream dis;
DataOutputStream dos;
byte[] buff;
/**
* @param args
*/
public static void main(String[] args) {
testsocket a=new testsocket();
new Thread(a.new wait()).start();
new Thread(a.new send()).start();
}
class wait implements Runnable{@Override
public void run() {
try {
ss=new ServerSocket(12345);
sk=ss.accept();
while(sk.isConnected()){
dis=new DataInputStream(sk.getInputStream());
dis.read(buff);
System.out.println(Tools.b2s(buff));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}class send implements Runnable{
String s;
Scanner in;
byte[] in_temp;
@Override
public void run() {
try {
sk=new Socket("127.0.0.1",12345);
s="";
while (!s.startsWith("exit")){
dos=new DataOutputStream(sk.getOutputStream());
in=new Scanner(System.in);
s=in.nextLine();
in_temp=Tools.s2b(s);
System.out.println(s);
dos.write(in_temp, 0, in_temp.length);
dos.flush();
}
System.exit(0);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}}
Tools.java[code = java]
Java codepublic class Tools {
public static String b2s(byte[] b){
char[] t;
int i=0;
t=new char[b.length];
while(i<b.length){
t[i]=(char)b[i];
i++;
}
return new String(t);
}public static byte[] s2b(String b){
byte[] t;
int i=0;
t=new byte[b.length()];
while(i<b.length()){
t[i]=(byte)b.charAt(i);
i++;
}
return t;
}
}[/code]
testsocket.javaimport java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class testsocket {
ServerSocket ss;
Socket sk;
DataInputStream dis;
DataOutputStream dos;
byte[] buff;
/**
* @param args
*/
public static void main(String[] args) {
testsocket a=new testsocket();
new Thread(a.new wait()).start();
new Thread(a.new send()).start();
}
class wait implements Runnable{@Override
public void run() {
try {
ss=new ServerSocket(12345);
sk=ss.accept();
while(sk.isConnected()){
dis=new DataInputStream(sk.getInputStream());
dis.read(buff);
System.out.println(Tools.b2s(buff));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}class send implements Runnable{
String s;
Scanner in;
byte[] in_temp;
@Override
public void run() {
try {
sk=new Socket("127.0.0.1",12345);
s="";
while (!s.startsWith("exit")){
dos=new DataOutputStream(sk.getOutputStream());
in=new Scanner(System.in);
s=in.nextLine();
in_temp=Tools.s2b(s);
System.out.println(s);
dos.write(in_temp, 0, in_temp.length);
dos.flush();
}
System.exit(0);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}}
这句话要放在while语句块里
会抛异常!
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class testsocket {
ServerSocket ss;
Socket sk;
DataInputStream dis;
DataOutputStream dos;
byte[] buff;
/**
* @param args
*/
public static void main(String[] args) {
testsocket a=new testsocket();
new Thread(a.new wait()).start();
new Thread(a.new send()).start();
}
class wait implements Runnable{ @Override
public void run() {
try {int len;
ss=new ServerSocket(12345);
while(null==sk||sk.isConnected()){
sk=ss.accept();
dis=new DataInputStream(sk.getInputStream());
len=dis.readInt();
buff=new byte[len];
System.out.println(dis.read(buff));
// System.out.println(buff.length);
System.out.println(Tools.b2s(buff));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class send implements Runnable{
String s;
Scanner in;
byte[] in_temp;
@Override
public void run() {
try {
s="";
while (!s.startsWith("exit")){
sk=new Socket("127.0.0.1",12345);
dos=new DataOutputStream(sk.getOutputStream());
in=new Scanner(System.in);
s=in.nextLine();
in_temp=Tools.s2b(s);
for(int i=0;i<in_temp.length;i++){
System.out.print(in_temp[i]+",");
}
dos.write(in_temp.length);
dos.write(in_temp, 0, in_temp.length);
dos.flush();
}
System.exit(0);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}
dos.write(in_temp, 0, in_temp.length);
dos.flush();
send类得上面3行是在输出流里写数据,上面在控制台打印了数据是有数据的。但是在wait类里面就是读不到数据,我真的不知道该如何去查找问题所在,请指点迷津!
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class testsocket {
ServerSocket ss;
Socket sk;
DataInputStream dis;
DataOutputStream dos;
/**
* @param args
*/
public static void main(String[] args) {
testsocket a=new testsocket();
new Thread(a.new wait()).start();
new Thread(a.new send()).start();
}
class wait implements Runnable{
byte[] buff=new byte[1024];
byte[] buff1;int len;
@Override
public void run() {
try {
ss=new ServerSocket(12345);
sk=ss.accept();
dis=new DataInputStream(sk.getInputStream());
System.out.println(sk.isConnected());
while(null==sk||sk.isConnected()){
len=dis.read(buff);
System.out.println(len);
buff1=new byte[len];
for(int i=0;i<len;i++){
buff1[i]=buff[i];
}
System.out.println(b2s(buff1));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class send implements Runnable{
String s;
Scanner in;
byte[] in_temp;
@Override
public void run() {
try {
s="";
sk=new Socket("127.0.0.1",12345);
dos=new DataOutputStream(sk.getOutputStream());
while (!s.startsWith("exit")){
in=new Scanner(System.in);
s=in.nextLine();
in_temp=s2b(s);
dos.write(in_temp, 0, in_temp.length);
dos.flush();
}
System.exit(0);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static String b2s(byte[] b){
char[] t;
int i=0;
t=new char[b.length];
while(i<b.length){
t[i]=(char)b[i];
i++;
}
return new String(t);
} public static byte[] s2b(String b){
byte[] t;
int i=0;
t=new byte[b.length()];
while(i<b.length()){
t[i]=(byte)b.charAt(i);
i++;
}
return t;
}
}
总算弄好了,是buff初始化的问题。