java使用TCP套接字编程
编程要求:
- 一个客户机从其标准输入(键盘)读取一行字符,并通过其套接字将该行发送给服务器。
- 服务器从其连接套接字读取一行字符。
- 服务器将该行 转换成大写。
- 服务器将修改后的行通过其连接套接字再回发给客户机。
- 客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。
java代码:
package com.rjxy.socket;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
ServerSocket welcomeSocket = new ServerSocket(8888);//服务器端开了一个应用进程,这个进程的端口号是8888
while(true){
Socket s = welcomeSocket.accept();
//接收客户端发来的连接请求,如果没有客户端请求,则一直处于阻塞状态
System.out.println("a client connected!");
Client c = new Client(s);
c.start();
}
}
}
package com.rjxy.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Client extends Thread{
Socket s;
DataInputStream dis;//输入流,用来读入数据
DataOutputStream dos;//输出流,用来输出数据
public Client(Socket s){
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
String clientSentence;
try {
clientSentence = dis.readUTF();//读取字符串
String capitalizadSentence = clientSentence.toUpperCase();//将小写字母转化为大写
dos.writeUTF(capitalizadSentence);//
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("a client disconnected");
}
}
}
}
package com.rjxy.socket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
Socket s = new Socket("127.0.0.1",8888);
//向服务端发出请求
System.out.println("success");
//System.out.println(sentence);
DataOutputStream outToServer = new DataOutputStream(s.getOutputStream());
DataInputStream inFromServer = new DataInputStream(s.getInputStream());
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
while(true){
String sentence = inFromUser.readLine();//从控制台读入数据
outToServer.writeUTF(sentence);//将该字符串发送到服务端的输入流
System.out.println("From Server:"+inFromServer.readUTF());
}
}
}