import java.net.*; import java.io.*; /** * 客户端 */ public class Client { public static void main(String[] args) { try{ //建立连接 Socket socket = new Socket("127.0.0.1",10000); //发送数据 OutputStream os = socket.getOutputStream(); //接收数据 InputStream is = socket.getInputStream();
//服务器端反馈 String s = ""; //输入流 BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); //循环处理 while(!s.equals("回答错误,继续!游戏结束!")){ System.out.println("请输入大或小:"); //用户输入 String input = br.readLine(); //发送 os.write(input.getBytes()); os.flush(); //获得服务器反馈 byte[] b = new byte[100]; int n = is.read(b); s = new String(b,0,n); System.out.println(s); } //关闭连接 is.close(); os.close(); socket.close();
}catch(Exception e){ e.printStackTrace(); } } }
import java.io.*; import java.net.*; /** * 服务器 */ public class Server { public static void main(String[] args) { try{ //建立服务器端socket ServerSocket ss = new ServerSocket(10000);
System.out.println("服务器已启动:");
while(true){ //接受连接 Socket s = ss.accept();
//启动一个线程去处理 ServerThread st = new ServerThread(s); st.start(); } }catch(Exception e){ e.printStackTrace(); } //关闭
import java.io.*;
/**
* 客户端
*/
public class Client {
public static void main(String[] args) {
try{
//建立连接
Socket socket = new Socket("127.0.0.1",10000);
//发送数据
OutputStream os = socket.getOutputStream();
//接收数据
InputStream is = socket.getInputStream();
//服务器端反馈
String s = "";
//输入流
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
//循环处理
while(!s.equals("回答错误,继续!游戏结束!")){
System.out.println("请输入大或小:");
//用户输入
String input = br.readLine();
//发送
os.write(input.getBytes());
os.flush();
//获得服务器反馈
byte[] b = new byte[100];
int n = is.read(b);
s = new String(b,0,n);
System.out.println(s);
}
//关闭连接
is.close();
os.close();
socket.close();
}catch(Exception e){
e.printStackTrace();
} }
}
import java.net.*;
/**
* 服务器
*/
public class Server {
public static void main(String[] args) {
try{
//建立服务器端socket
ServerSocket ss = new ServerSocket(10000);
System.out.println("服务器已启动:");
while(true){
//接受连接
Socket s = ss.accept();
//启动一个线程去处理
ServerThread st = new ServerThread(s);
st.start();
}
}catch(Exception e){
e.printStackTrace();
}
//关闭
}}
import java.net.*;
import java.util.*;
/**
* 逻辑线程对象
*/
public class ServerThread extends Thread {
/**声明连接对象*/
Socket s;
/**声明输出流对象*/
OutputStream os;
/**声明输出流对象*/
InputStream is;
/**Random对象*/
Random r;
/**随机生成的数字*/
int n;
/**用户出错的次数*/
int count = 0;
public ServerThread(Socket s){
this.s = s;
//初始化输入输出流
init();
//初始化
n = generateNumber();
}
private void init(){
r = new Random();
try{
os = s.getOutputStream();
is = s.getInputStream();
}catch(Exception e){
}
}
private int generateNumber(){
return r.nextInt(6) + 1;
}
public void run(){
//错误的次数不到3
while(count < 3){
System.out.println(n);
try{
//获得输入
byte[] b = new byte[10];
int num = is.read(b);
//转换成字符串
String s = new String(b,0,num);
//比较
if(s.equals("大")){
//判断是否正确
if(n > 3){
//重新生成一个
n = generateNumber();
//发送反馈
os.write("恭喜你,答对了!".getBytes());
os.flush();
}else{
//重新生成一个
n = generateNumber();
//错误次数增加
count++;
//发送反馈
os.write("回答错误,继续!".getBytes());
os.flush();
}
}else if(s.equals("小")){
//判断是否正确
if(n < 4){
//重新生成一个
n = generateNumber();
//发送反馈
os.write("恭喜你,答对了!".getBytes());
os.flush();
}else{
//重新生成一个
n = generateNumber();
//错误次数增加
count++;
//发送反馈
os.write("回答错误,继续!".getBytes());
os.flush();
}
}else{ //输入错误
os.write("格式错误,请输入大或小,继续!".getBytes());
os.flush();
}
}catch(Exception e){
e.printStackTrace();
}
}
//游戏结束
try{
os.write("游戏结束!".getBytes());
//关闭所有连接
//is.close();
//os.close();
s.close();
}catch(Exception e){
}
}
}
发送:
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;public class TcpSend {
public void send(String str) {
try {
Socket s = new Socket("192.168.8.230",6);
OutputStream ops = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(ops);
dos.writeUTF("My Message is :"+"\n"+str);
dos.flush();
dos.close();
ops.close();
s.close();
}
catch (Exception e) {
System.out.println("TcpSend");
e.printStackTrace();
}
}
}
接受:
import java.net.*;
import java.io.InputStream;public class TcpRecv {
public static void main(String [] args) throws Exception {
try {
ServerSocket server = new ServerSocket(6);
Socket s = server.accept();
InputStream ips = s.getInputStream();
byte []buf = new byte[1024];
int len = ips.read(buf);
String str = new String(buf,0,len);
System.out.println(str);
s.close();
server.close();
} catch (Exception e) {
System.out.println("TcpRecv");
e.printStackTrace();
}
}
}
我的代码在本机运行时第一行收到的是乱码,其他正常,在两台计算机通信时根本收不到消息,不知道为什么。