黑马程序员技术交流社区
标题:
求解 TCP问题
[打印本页]
作者:
杜光
时间:
2013-6-15 00:51
标题:
求解 TCP问题
本帖最后由 孙百鑫 于 2013-6-15 08:34 编辑
/*
客户端通过键盘录入用户名
服务端对这个用户名进行效验
如果该用户存在,在服务端现实xxx,已登录
并在客户端显示xxx,欢迎光临
如果该用户存在,在服务端显示xxx,尝试登录。
并在客户端显示xxx,该用户不存在。
最多就登录三次
*/
import java.io.*;
import java.net.*;
class User
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.31.171",10008);
BufferedReader buf =
new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(s.getOutputStream());
String line = null;
while ((line=buf.readLine())!=null)
{
pw.println(line);
}
s.shutdownOutput();
s.close();
}
}
class Server
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10008);
Socket s =ss.accept();
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//PrintWriter pw = new PrintWriter();
String line = null;
int x = 0;
String str = "duguang";
while(x<3 && (line=bufIn.readLine())!=null)
{
if (line.equals(str))
{
System.out.println(str+"已经登录");
}
else
{
System.out.println(line+"正在尝试登录");
x++;
}
}
bufIn.close();
//pw.close();
}
}
复制代码
运行后,客户端可以输入但是,服务端好像没有判断,求解
作者:
′х.|鰉❤耔
时间:
2013-6-15 01:11
public class Server
{
public static void main(String args[]){
try{
ServerSocket server=new ServerSocket(6000);//端口号
System.out.println("服务器已经启动,等待客户端连接中...");
int clientnum=0;//计数器
for(int i=0;i>=0;i++){
Socket socket=server.accept();
//DataOutputStream dop=new DataOutputStream(socket.getOutputStream());//输出信息给客户端
ServerThread st=new ServerThread(socket,clientnum);
st.start();
clientnum++;
System.out.println("第"+clientnum+"个客户端连接服务器!");
//if(i==5){
// dop.writeUTF("关闭");
// break;
//}
}
server.close();
}catch(Exception e){e.printStackTrace();}
}
}
class ServerThread extends Thread
{
private Socket socket;
private int clientnum;
public ServerThread(Socket socket,int num){
this.socket=socket;
this.clientnum=num;
}
public void run(){
try{
DataInputStream dip=new DataInputStream(socket.getInputStream());//输入客户端的信息
System.out.println(dip.readUTF());//打印出客户端的信息
dip.close();
}catch(Exception e){e.printStackTrace();}
}
}
复制代码
public class Client
{
public static void main(String args[]){
try{
//String[] serverstr={"关公","周瑜","诸葛亮","项羽","西施"};
for(int i=0;i>=0;i++){
Socket socket=new Socket("127.0.0.1",6000);
//System.out.println(serverstr[i]+":连接到服务器");
ClientThread ct=new ClientThread(socket);
ct.start();
ct.join(); //永久等待
socket.close();
}
}catch(Exception e){e.printStackTrace();}
}
}
class ClientThread extends Thread
{
private Socket socket;
public ClientThread(Socket socket){
this.socket=socket;
}
public void run(){
try{
DataOutputStream dop=new DataOutputStream(socket.getOutputStream());//输出信息给服务器
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();//下一行
dop.writeUTF(str);
dop.flush();
dop.close();
}catch(Exception e){e.printStackTrace();}
}
}
复制代码
这个是我自己写的无限聊天的多线程Socket,你最好是用我这样的方法来从客户端给服务器传送数据,最好别用读取一行的,因为肯能度到空格噢,你试下把你的line先去除前后的空格在和你那个字符串对比看看行不行吧~
还有我上面的代码不是粘贴复制的,是我自己写的一个Demo噢~最讨厌一些人我把代码贴出来就觉得我是从网上拷贝的。
作者:
′х.|鰉❤耔
时间:
2013-6-15 01:12
还有我写的比较简单,应该很好理解的。如果哪里写错,还请楼主指出错误。
作者:
孙百鑫
时间:
2013-6-15 07:23
不知道楼主的问题解决了嘛?如果解决的话.请改主题分类哦~~
作者:
杜光
时间:
2013-6-15 07:45
孙百鑫 发表于 2013-6-15 07:23
不知道楼主的问题解决了嘛?如果解决的话.请改主题分类哦~~
我好像帖子从昨天开始没有编辑功能了
作者:
孙百鑫
时间:
2013-6-15 08:34
杜光 发表于 2013-6-15 07:45
我好像帖子从昨天开始没有编辑功能了
那我帮您修改了:)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2