文章目录
文章目录
按照教程,出错:
在Eclipse中,在运行的时候我们是不能给程序指定参数的
因此:
public static void main(String[] args) {
// TODO Auto-generated method stub
String clientName = args[0];
System.out.println(clientName);
}
出错。
所以采用Scanner
客户端:
连接到本地
记得要关闭套接字
package my.tcp.demo;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import org.omg.CORBA.portable.UnknownException;
public class TCPTest {
public static void main(String[] args){
// TODO Auto-generated method stub
//System.out.println("请输入将要连接的服务器名及端口号:");
// Scanner ssScanner=new Scanner(System.in);
// String clientName = ssScanner.next();
// int post = ssScanner.nextInt();
String clientName = "localhost";
int post = 6666;
System.out.println("clientName:"+clientName);
System.out.println("post:"+post);
try {
InetAddress ip=InetAddress.getByName(clientName);
// System.out.println(ip);
// System.out.println(post);
Socket client=new Socket(ip,post);
System.out.println("client get server ip:"+client.getRemoteSocketAddress());
//返回套接字的输出流,并给oo
OutputStream oo=client.getOutputStream();
//创建一个新的数据流,该引用类型指向oo,用以将数据写入基础输出流oo
DataOutputStream out=new DataOutputStream(oo);
//将数据写入数据流
out.writeUTF("gyyyyy"+client.getLocalPort());
client.close();
}catch(UnknownHostException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
服务器:
package my.tcp.demo;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
class GreetingServer extends Thread{
int timeout=30000;
private ServerSocket serverSocket;
GreetingServer(int post) throws IOException{
//创建绑定到post端口的套接字
serverSocket=new ServerSocket(post);
//指定超时值
serverSocket.setSoTimeout(timeout);
}
public void run() {
System.out.println("server port :"+serverSocket.getLocalPort());
Socket ssSocket;
try {
//监听并接受连接
ssSocket = serverSocket.accept();
System.out.println("server get client ip:"+ssSocket.getRemoteSocketAddress());
InputStream ins=ssSocket.getInputStream();
DataInputStream data=new DataInputStream(ins);
System.out.println("server接收:"+data.readUTF());
server.close();
}catch(SocketTimeoutException s) {
System.out.println("接收超时");
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class ServiceTest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建绑定到指定端口的服务器套接字
int post =6666;
GreetingServer greetingServer=new GreetingServer(post);
greetingServer.start();
}
}
客户端窗口:
clientName:localhost
post:6666
client get server ip:localhost/127.0.0.1:6666
服务器窗口:
server port :6666
server get client ip:/127.0.0.1:54896
server接收:gyyyyy54896
反馈:
客户端:
package my.tcp.demo;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import org.omg.CORBA.portable.UnknownException;
public class TCPTest {
public static void main(String[] args){
// TODO Auto-generated method stub
//System.out.println("请输入将要连接的服务器名及端口号:");
// Scanner ssScanner=new Scanner(System.in);
// String clientName = ssScanner.next();
// int post = ssScanner.nextInt();
String clientName = "localhost";
int post = 6666;
System.out.println("clientName:"+clientName);
System.out.println("post:"+post);
try {
InetAddress ip=InetAddress.getByName(clientName);
// System.out.println(ip);
// System.out.println(post);
Socket client=new Socket(ip,post);
System.out.println("client get server ip+port:"+client.getRemoteSocketAddress());
//返回套间字的输出流,并给oo
OutputStream oo=client.getOutputStream();
//创建一个新的数据流,该引用类型指向oo,用以将数据写入基础输出流oo
DataOutputStream out=new DataOutputStream(oo);
//将数据写入数据流
System.out.println("client发……");
out.writeUTF("我是客户端gyyyyy"+client.getLocalPort()+",收到请回答");
InputStream ii=client.getInputStream();
DataInputStream ii2=new DataInputStream(ii);
System.out.println("client接收中……");
System.out.println("client get server ip:"+ii2.readUTF());
client.close();
}catch(UnknownHostException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
服务器:
package my.tcp.demo;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
class GreetingServer extends Thread{
int timeout=30000;
private ServerSocket serverSocket;
GreetingServer(int post) throws IOException{
//创建绑定到post端口的套接字
serverSocket=new ServerSocket(post);
//指定超时值
serverSocket.setSoTimeout(timeout);
}
public void run() {
System.out.println("server port :"+serverSocket.getLocalPort());
Socket ssSocket;
try {
//监听并接受连接
ssSocket = serverSocket.accept();
System.out.println("server get client ip:"+ssSocket.getRemoteSocketAddress());
InputStream ins=ssSocket.getInputStream();
DataInputStream data=new DataInputStream(ins);
System.out.println("server接收:"+data.readUTF());
OutputStream ous=ssSocket.getOutputStream();
DataOutputStream outdata=new DataOutputStream(ous);
System.out.println("服务器反馈");
outdata.writeUTF("我是服务器,数据已经接收"+ssSocket.getLocalAddress());
ssSocket.close();
}catch(SocketTimeoutException s) {
System.out.println("接收超时");
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class ServiceTest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建绑定到指定端口的服务器套接字
int post =6666;
GreetingServer greetingServer=new GreetingServer(post);
greetingServer.start();
}
}
客户端窗口:
clientName:localhost
post:6666
client get server ip+port:localhost/127.0.0.1:6666
client发……
client接收中……
client get server ip:我是服务器,数据已经接收/127.0.0.1
服务器窗口:
server port :6666
server get client ip:/127.0.0.1:55991
server接收:我是客户端gyyyyy55991,收到请回答
服务器反馈