多线程和Socket套接字

一个进程可以有多个线程
一个线程至少会有一个进程

extends Thread类
implements Runnable接口
重写run()方法

启动线程start():1.启动一个线程 2.调用run()方法

区别:
继承Thread类 资源不共享
实现Runnable接口 资源共享 还可以继承其他类

创建对象时
继承Thread类 直接new对象
实现Runnable接口 new Thread(构造参数:Runnable接口实现类对象);

--------------------------------------
Socket:套接字
java.net包

流式套接字:基于TCP协议的Socket网络编程

---服务端(main方法):
ServerSocket serverSocket = new ServerSocket(5000); //创建服务端socket 5000端口
Socket socket = serverSocket.accept(); //等待通信
InputStream is = socket.getInputStream(); //得到输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //把输入流封装成缓冲字符输入流
String info;
while((info=br.readLine())!=null){
System.out.println(info);
}

OutputStream os = socket.getOutputStream();
String info = "服务端的消息";
byte[] infos = info.getBytes();
os.write(infos);

os.close();
br.close();
is.close();
socket.close();
serverSocket.close();

---客户端(main方法):
Socket socket = new Socket("localhost",); //客户端 参数1:连接到ip 本机localhost 参数2:服务端端口5000
OutputStream os = socket.getOutputStream(); //得到输出流
String info = "客户端的消息";
byte[] infos = info.getBytes();
os.write(infos);

socket.shutdownOutput(); //socket输出完了要关闭

InputStream is = socket.getInputStream(); //得到输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //把输入流包装成缓冲字符输入流
String temp;
while((temp = br.readLine())!=null){
System.out.println(temp);
}

br.close();
is.close();
os.close();
socket.close();

//如果传的是对象 首先user类需要实现序列化 public class User implements Serializable
客户端
new user对象...
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.write(user);

oos.close();

服务端
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User)ois.readObject();
System.out.println(user.getUserName());

ois.close();

数据包式套接字:基于UDP协议的Socket网络编程

=====================多线程==============

对应每个客户请求 都要创建一个相应的线程

//线程类
public class LoginThread extends Thread{
private Socket socket;

public LoginTread(Socket socket){
this.socket = socket;
}

//处理客户端请求
public void run(){
InputStream is = socket.getInputStream(); //得到输入流
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User)ois.readObject();
System.out.println(user.getUserName());

OutputStream os = socket.getOutputStream();
String info = "服务端的消息";
byte[] infos = info.getBytes();
os.write(infos);

os.close();
ois.close();
is.close();
socket.close();

}

}

//服务端

---服务端(main方法):
ServerSocket serverSocket = new ServerSocket(5000); //创建服务端socket 5000端口
while(true){ //无限循环等待客户的请求
Socket socket = serverSocket.accept(); //等待通信
LoginThread loginTread = new LoginThread(socket); //把每个客户socket传入新线程
loginThread.start(); //开启线程

}

-----------

得到客户端ip

InetAddress address = socket.getInetAddress();
String ip = address.getHostAddress();

时间: 2024-12-17 19:02:13

多线程和Socket套接字的相关文章

Linux C利用Socket套接字进行服务器与多个客户端进行通讯

服务器端 #include <stdlib.h> #include <sys/types.h> #include <stdio.h> #include <sys/socket.h> #include <string.h> #include <signal.h> #include <arpa/inet.h> #include <unistd.h> #include <pthread.h> //服务器端

19、网络编程 (Socket套接字编程)

网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤.网线提供的驱动. 网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络. 传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议. 应用层:主要负责应用程序的协议,例如

基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程

基于UDP协议 的socket套接字编程 1.UDP套接字简单示例 1.1服务端 import socket server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 建立一个UDP协议的服务器 server.bind(("127.0.0.1",8080)) while True: data,addr = server.recvfrom(1024) server.sendto(data.upper(),addr) server

linux网络环境下socket套接字编程(UDP文件传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

socket套接字编程

socket套接字编程 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发         详见网络通信原理   socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Soc

Socket(套接字) IP TCP UDP HTTP

Socket(套接字) (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)(socket是操作系统提供出来的接口)的接口,区分不同应用程序进程间的网络通信和连接.生成套接字,主要有3个参数:通信的目的IP地址.使用的传输 层

Python开发基础-Day23try异常处理、socket套接字基础1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

socket套接字TCP API

socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点,或称之为句柄.IP地址+端口号就可以唯一确定一个socket. TCP/IP协议族包括传输层(TCP/UDP),网络层(ICMP/IP/IGMP),链路层(ARP/RARP).应用层通常使用socket地址,即IP地址+端口号来确定通信的对端.而socket正是TCP/IP协议族与应用层之间的接口层,可以说对上层提供了TCP/IP协议族的一种封装,无需关心更底层的